Java面试专题——面向对象

面向过程和面向对象的区别

面向过程:当事件比较简单的时候,利用面向过程,注重的是事件的具体的步骤/过程,注重的是过程中的具体的行为,以函数为最小单位,考虑怎么做。

面向对象:注重找“参与者”,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。

二者相辅相成,并不是对立的。

解决复杂问题,可以通过面向对象方式,便于我们从宏观上把握事物之间复杂的关系;具体到微观操作,仍然使用面向过程方式来处理。

面向对象三个阶段

【1】面向对象分析OOA -- Object Oriented Analysis

  • 从对象抽取出类
  • 类里面有什么
    • 动词--》动态特性--》方法
    • 名词--》静态特性--》属性

【2】面向对象设计OOD -- Object Oriented Design

  • 先有类,再有对象

【3】面向对象编程OOP -- Object Oriented Programming

如何理解Java的面向对象

面向对象编程的核心,主要是对象、类、封装、继承、多态以及抽象。

  • 首先是将万事万物都看成一个个具体的对象,而类就是抽取一部分对象共同的属性、行为等构建的一个用于创建这类对象的模板;
  • 封装则是为了提高数据的安全性,通过访问修饰符去控制类的相关权限;
  • 继承则是通过子类继承父类的属性和方法来提高代码的复用,当然也是多态的前置条件;
  • 而多态则是通过方法的重载和重写,来简化程序的调用,提高代码的灵活性和可拓展性;
  • 最后则是抽象,通过抽象类和接口的方式,来解决单继承的不足,进一步提高代码的可拓展性和可维护性。

面向对象三大特性

封装(Encapsulation)

封装的本质,就是把该隐藏的隐藏起来,该暴露的暴露出来。

封装的主要目的是隐藏对象内部的复杂性和实现细节,只对外公开简单的接口。

封装是一种信息隐藏技术,在java中通过访问修饰符(如private、protected、public等)来实现,控制用户对类的修改和访问数据的程度,其中private是最严格的访问级别,它限制了类外部对类内部成员的访问。

适当的封装可以让程式码更容易理解和维护,也加强了程式码的安全性。

封装的好处

  1. 提高代码的安全性:通过隐藏类的内部实现细节,封装可以防止外部代码直接访问和修改类的内部状态,从而减少了错误的发生。

  2. 提高代码的复用性:封装使得类的内部实现可以独立于外部使用,因此可以在不同的上下文中重用同一个类。

  3. 提高代码的可维护性:由于封装隐藏了类的内部实现,因此当需要修改类的内部实现时,只需要修改类的内部代码,而不需要修改使用该类的外部代码。

封装的设计,也就是所谓的“高内聚,低耦合”:

  • 高内聚:类的内部数据操作细节自己完成,不允许外部干涉;
  • 低耦合:仅对外暴露少量的方法用于使用。 隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。

继承(Inheritance)

继承的本质就是子类继承父类所定义的内容。

继承就是让一个类继承另一个类的属性和方法。通过继承,子类可以重用父类的代码,而不需要重新编写相同的代码。

继承是代码复用的重要手段之一,也是多态性的基础。

继承的好处

  1. 提高代码的复用性:子类可以继承父类的属性和方法,从而避免了代码的重复编写。

  2. 便于代码的扩展:通过继承,可以在不修改父类代码的情况下,通过扩展子类来添加新的功能。

  3. 支持多态性:多态性是面向对象编程的一个重要特性。

注意: 

  • 在Java中,一个类只能直接继承一个父类(单继承),但可以通过多层继承来间接继承多个类。

  • 继承具有传递性,即子类会继承父类以及父类的父类(直到Object类)的所有非私有属性和方法。

  • 父类的私有成员(属性和方法)虽然被子类继承,但子类不能直接访问它们。子类只能通过父类提供的公共或受保护的方法来间接访问这些私有成员。

多态(Polymorphism)

多态的本质,就是通过对于同一个方法调用,然后由于其实现子类的不同,来实现不同的需求。

多态就是可以用统一的接口来操作不同的对象。当通过父类类型的引用调用方法时,由于多态的存在,会根据引用所指向的对象的实际类型来调用相应的方法,这就实现了多态。

Java中的多态通过继承和方法重写实现:

  1. 继承:子类通过继承获得父类的属性和方法,从而可以扩展父类的功能。

  2. 方法重写:子类根据需要重写父类中的方法,以改变方法的行为。

多态的设计,也就是所谓的“开闭原则”

  • 对扩展是开放:可以通过实现不同子类,实现不同的能力;
  • 对修改关闭:避免了修改旧代码。

类与类之间的关系

一、继承关系

继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。在Java中继承关系通过关键字extends明确标识,在设计时一般没有争议性。

在UML类图设计中,继承用一条带空心三角箭头的实线表示,从子类指向父类,或者子接口指向父接口。

二、实现关系

实现指的是一个class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系。在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性。

在UML类图设计中,实现用一条带空心三角箭头的虚线表示,从类指向实现的接口。

三、依赖关系

简单的理解,依赖就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是类B的变化会影响到类A。比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖。表现在代码层面,让类B作为参数被类A在某个method方法中使用。

在UML类图设计中,依赖关系用由类A指向类B的带箭头虚线表示。

四、关联关系

关联体现的是两个类之间语义级别的一种强依赖关系,比如我和我的朋友,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。关联可以是单向、双向的。表现在代码层面,为被关联类B以类的属性形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。

在UML类图设计中,关联关系用由关联类A指向被关联类B的带箭头实线表示,在关联的两端可以标注关联双方的角色和多重性标记。

五、聚合关系

聚合是关联关系的一种特例,它体现的是整体与部分的关系,即has-a的关系。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。比如计算机与CPU、公司与员工的关系等,比如一个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动力攻击潜艇等。表现在代码层面,和关联关系是一致的,只能从语义级别来区分。

在UML类图设计中,聚合关系以空心菱形加实线箭头表示。

六、组合关系

组合也是关联关系的一种特例,它体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合。它同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束,比如人和人的大脑。表现在代码层面,和关联关系是一致的,只能从语义级别来区分。

在UML类图设计中,组合关系以实心菱形加实线箭头表示。

七、总结

对于继承、实现这两种关系没多少疑问,它们体现的是一种类和类、或者类与接口间的纵向关系。其他的四种关系体现的是类和类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准确定位是很难的。前面也提到,这四种关系都是语义级别的,所以从代码层面并不能完全区分各种关系,但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/67782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电阻电位器可调电阻信号隔离变送器典型应用

电阻电位器可调电阻信号隔离变送器典型应用 产品描述: 深圳鑫永硕科技的XYS-5587系列是一进一出线性电子尺(电阻/电位计信号及位移)信号隔离变送器,是将输入电阻,线性电子尺,角度位移传感器信号进行采集,隔离,放大并转换成模拟量信号的小型仪表设备,并以…

Alluxio 联手 Solidigm 推出针对 AI 工作负载的高级缓存解决方案

作者:Wayne Gao, Yi Wang, Jie Chen, Sarika Mehta Alluxio 作为全球领先的 AI 缓存解决方案供应商, 提供针对 GPU 驱动 AI 负载的高速缓存。其可扩展架构支持数万个节点,能显著降低存储带宽的消耗。Alluxio 在解决 AI 存储挑战方面的前沿技…

文件系统格式RAW数据恢复全攻略

一、RAW文件系统格式深度解析 在数据存储的世界里,文件系统扮演着至关重要的角色,它负责管理和组织硬盘、U盘、SD卡等存储设备上的数据。而RAW文件系统格式,作为一种特殊状态,常常让许多用户感到困惑与不安。RAW格式并非一种标准…

探索 Stable-Diffusion-Webui-Forge:更快的AI图像生成体验

目录 简介🌟 主要特点📥 安装步骤1. 下载2. 配置环境和安装依赖3. 模型目录说明 🚀 运行 Stable-Diffusion-Webui-Forge1. 进入项目目录2. 运行项目3. 打开页面 🎨 使用体验常见问题📝 小结 简介 Stable-Diffusion-We…

《在ArkTS中实现模型的可视化调试和监控:探索与实践》

在当今人工智能与鸿蒙Next深度融合的时代,利用ArkTS开发高效智能应用成为开发者们关注的焦点。而模型的可视化调试和监控对于确保模型的准确性和性能至关重要,本文将深入探讨在ArkTS中实现这一目标的方法和实践。 ArkTS与模型开发基础 ArkTS作为一种基…

Docker 和 Kubernetes

Docker 和 Kubernetes (K8s) 是当前最流行的容器化技术,用于开发、部署和管理应用程序。它们通常一起使用,提供从开发到生产的完整生命周期管理,特别是在微服务架构和云原生应用的开发中。 1. Docker简介 Docker 是一个开源的容器化平台&am…

汇编与逆向(一)-汇编工具简介

RadASM是一款著名的WIN32汇编编辑器,支持MASM、TASM等多种汇编编译器,Windows界面,支持语法高亮,自带一个资源编辑器和一个调试器。 一、汇编IDE工具:RadASM RadASM有内置的语言包 下载地址:RadASM asse…

Yearning开源MySQL SQL审核平台

一款MYSQL SQL语句/查询审计工具,为DBA与开发人员使用. 本地部署,注重隐私,简单高效的MYSQL审计平台。 它可以通过流程审批,实现真实线上环境sql的审核和执行,还可以回滚执行,能够确保线上SQL更新的可靠性…

[NVME]controller capabilities

一、 part of register definition startendsymboldescription0h7hCAPController Capabilities 二、CAP – Controller Capabilities This register indicates basic capabilities of the controller to host software BitsTypeResetDescription63:58RO0hReserved57ROImpl Spe…

VUE之Router使用及工作模式

1、路由的使用 【两个注意点】 1)路由组件通常放在pages 或 views文件夹,一般组件通常放在components文件夹。 2)通过点击导航,视觉效果上"消失"了的路由组件,默认是被"卸载"掉的,需要的时候再去挂载。 // 创建一个路由器,并暴露出去// 第一步:…

PyTorch使用教程(10)-torchinfo.summary网络结构可视化详细说明

1、基本介绍 torchinfo是一个为PyTorch用户量身定做的开源工具,其核心功能之一是summary函数。这个函数旨在简化模型的开发与调试流程,让模型架构一目了然。通过torchinfo的summary函数,用户可以快速获取模型的详细结构和统计信息&#xff0…

【2024 博客之星评选】请继续保持Passion

我尝试复盘自己2024年走的路,希望能给诸君一些借鉴。 文章目录 回头望感想与收获成长与教训今年计划感恩一些体己话 回头望 回望我的2024年,年初拿高绩效,但感觉逐渐被公司一点点剥离出中心;年中一直在学习防患于未然&#xff1b…

C++ 类- 构造和析构

空类 class A {};空类大小: sizeof(A) 1编译器会默认生成 6 个成员函数: class A { public:A();//构造函数 - 完成对象初始化工作~A();//析构函数 - 完成对象的资源清理A(const A& a);//拷贝构造函数 - 使用同一类中之前创建的对象来初始化新创建…

集群、分布式及微服务间的区别与联系

目录 单体架构介绍集群和分布式架构集群和分布式集群和分布式区别和联系 微服务架构的引入微服务带来的挑战 总结 单体架构介绍 早期很多创业公司或者传统企业会把业务的所有功能实现都打包在一个项目中,这种方式就称为单体架构 以我们都很熟悉的电商系统为例&…

js实现数据结构

常见的数据结构 数组 创建数组 数组字面量[],new Array().fill() 二维数组,两层循环创建增 头部添加unshift 尾部添加push 任意位置添加 splice(index,0,item)删 头部删除 shift 尾部删除pop 任意位置删除splice(index,num) 栈 先进后出 push,pop 队列 先进先出 push,shi…

数据分析 基础定义

一、大数据的定义 数据分析是基于商业等目的,有目的的进行收集、整理、加工和分析数据,提炼有价值信息的过程。 大数据分析即针对海量的、多样化的数据集合的分析 大数据分析是一种利用大规模数据集进行分析和挖掘知识的方法。随着互联网、社交媒体、移动…

数据库高可用方案-04-删除策略

数据库数据高可用系列 数据库高可用方案-01-数据库备份还原方案 数据库高可用方案-02-多机房部署 数据库高可用方案-03-主备等高可用架构 数据库高可用方案-04-删除策略 数据库高可用方案-05-备份与恢复 数据库高可用方案-06-监控与报警 数据库高可用方案-07-一致性校验…

从Windows通过XRDP远程访问和控制银河麒麟ukey v10服务器,以及多次连接后黑屏的问题

从Windows通过XRDP远程访问和控制银河麒麟ukey v10服务器,以及多次连接后黑屏的问题。 安装 rdp 服务: yum install -y epel-release yum install -y xrdp或者如下: 可以通过下载rpm软件包,然后rpm方式安装。访问xrdp官网https…

python正则训练。

在PythonTip,我们总是想要了解我们每天有多受欢迎,并从流行的网站上抓取了对话。 每个对话都占据1行,总共有 N 个这样的对话。每个对话中最多有1个单词说"pythontip"(全部小写)。我们希望你帮助我们确定一个…

OpenAI-Edge-TTS的使用

OpenAI-Edge-TTS的使用相对简单,以下是具体步骤: 一、安装首先,你需要通过Python包管理工具pip来安装Edge-TTS库。在命令行中输入以下命令:【bash】 pip install edge-tts如果想使用edge-tts和edge-playback命令,最好使用pipx。二、基本使用安装完成后,你就可以开始使用E…