面向对象四大特性

92 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第29天,点击查看活动详情 封装:

隐藏信息保护数据,对外暴露的修改逻辑要限制,类的属性设计的时候要贴合业务比如id不可能由外部设置是内部实现的,对于属性的访问权限及修改权限还有修改范围要慎重考虑:钱包余额应该只暴露增加和删除的两个方法,而不应该暴露直接设置

一句话:访问权限要慎重考虑,修改范围,权限,合理性都需要和业务结合考虑;操作者出错的概率足够小,避免调用者需要了解或者修改内部逻辑。

抽象

隐藏方法具体实现,只需要调用即可,不需要了解方法具体实现。

调用者在使用函数的时候,并不需要去研究函数内部的实现逻辑,只需要通过函数的命名、注释或者文档,了解其提供了什么功能,就可以直接使用了

意义

1.人脑能承受的信息复杂程度是有限的,所以我们必须忽略掉一些非关键性的实现细节。而抽象作为一种只关注功能点不关注实现的设计思路,正好帮我们的大脑过滤掉许多非必要的信息。

2.在定义(或者叫命名)类的方法的时候,也要有抽象思维,不要在方法定义中,暴露太多的实现细节,以保证在某个时间点需要改变方法的实现逻辑的时候,不用去修改其定义。

继承

“is a”关系,单继承和多继承,Java支持单继承

意义

代码复用,相同部分子类复用父类部分,也可以通过组合关系解决代码复用问题

缺点

过度使用继承,继承层次过深过复杂,就会导致代码可读性、可维护性变差。

了解一个功能实现的时候要不断的从父类中一层一层往上找,父类和子类耦合(一般情况下是父类需要了解到子类的一些细节),修改父类代码会影响子类

多用组合少用继承

多态

子类可以替换父类实现。

实现方式:

继承加方法重写;接口类语法,duck-typing方法(动态语言支持,Java是静态语言不支持)

接口类

不同Class实现统一接口不同实现,传入不同的Class调用方法会根据Class类型调用对应的实现

duck-typing方法

两个类之间不需要有特殊关系比如继承或者实现同一接口,两个类只需要有同样的方法即可,不需要借助其他支持。

意义

提高代码可扩展性和复用性,不需要改动调用方调用代码,传入类型不同自动调用不同方法


封装特性:信息隐藏或者数据访问保护

抽象特性:如何隐藏方法的具体实现,让使用者只需要关心方法提供了哪些功能,不需要知道这些功能是如何实现的

多态特性:子类可以替换父类,在实际的代码运行过程中,调用子类的方法实现