Java基础___面向对象的思想

本文以大白话解释Java的面向对象思想,包括封装、继承、多态三大特性,并介绍了面向对象的五大基本原则:单一职责原则、开放封闭原则、替换原则、依赖原则和接口分离原则,帮助初学者深入理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

=========================================大白话举例说明===========================================

很多人在接触面向对象思想的时候,觉得和我们现实生活脱节太多不好理解。其实完全可以把自己想象成女娲娘娘。然后手上有一坨可以捏成任何物品的泥巴,你需要人的时候就把泥巴捏成人,你需要山的时候就把泥巴捏成山。那坨泥巴就是类,人和山就是你创造的对象,而你,就是Java世界的神。封装的特性就是让你在创造不同的物种时他们拥有各自不同的天性或者功能。继承就是让这些物种的天性和功能在后代中繁衍中不停的保留和进化下去。多态就是一个名称可以代表许多不同类的对象,这些对象之间有直接或者间接的联系(父类或超类)。比如,小强是一个名字,这个名字可以代表某个人,也可以代表某蟑螂,人和蟑螂都属于动物类,因此你调用一个跑路的命令 ,张三所代表的不同对象就会以不同方式来完成跑步这个动作(人用两条腿跑,蟑螂用四条腿跑)。

 

=================================面向对象三大基本特征、五大基本原则==================================

三大特性是:封装,继承,多态  

 

所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息(private)隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。 

    封装的好处
        1、提高了代码的复用性
        2、隐藏了实现细节,还要对外提供可以访问的方式。便于调用者的使用。这是核心之一,也可以理解为就是封装的概念
        3、提高了安全性    

 

所谓继承是指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力; 

继承的好处:
        1、继承的出现提高了代码的复用性,提高软件开发效率。
        2、继承的出现让类与类之间产生了关系,提供了多态的前提。

附:【java类为什么只能单继承多实现多继承的话,多个父类可能会出现相同的方法,子类在调用该同名方法时时,就不能确定是哪一个了。而接口中只有方法的声明,没有方法体,子类需要重写接口中的方法,调用的就是子类重写的方法,这样的话,就可以一次重写,多次实现了。(接口之间可以多继承)】

 

所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。

多态的好处:
        1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。 
        2. 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。 

 

 

 

五大基本原则 

单一职责原则SRP(Single Responsibility Principle)
是指一个类的功能要单一,不能包罗万象。如同一个人一样,分配的工作不能太多,否则一天到晚虽然忙忙碌碌的,但效率却高不起来。

 

开放封闭原则OCP(Open-Close Principle) 
一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。比如:一个网络模块,原来只服务端功能,而现在要加入客户端功能,那么应当在不用修改服务端功能代码的前提下,就能够增加客户端功能的实现代码,这要求在设计之初,就应当将服务端和客户端分开,公共部分抽象出来。

 

替换原则(the Liskov Substitution Principle LSP) 
子类应当可以替换父类并出现在父类能够出现的任何地方。比如:公司搞年度晚会,所有员工可以参加抽奖,那么不管是老员工还是新员工,也不管是总部员工还是外派员工,都应当可以参加抽奖,否则这公司就不和谐了。

 

依赖原则(the Dependency Inversion Principle DIP)
具体依赖抽象,上层依赖下层。假设B是较A低的模块,但B需要使用到A的功能,这个时候,B不应当直接使用A中的具体类: 而应当由B定义一抽象接口,并由A来实现这个抽象接口,B只使用这个抽象接口:这样就达到了依赖倒置的目的,B也解除了对A的依赖,反过来是A依赖于B定义的抽象接口。通过上层模块难以避免依赖下层模块,假如B也直接依赖A的实现,那么就可能造成循环依赖。一个常见的问题就是编译A模块时需要直接包含到B模块的cpp文件,而编译B时同样要直接包含到A的cpp文件。

接口分离原则(the Interface Segregation Principle ISP) 
模块间要通过抽象接口隔离开,而不是通过具体的类强耦合起来

 

 

 

最后附上一张神图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值