Java笔记··By/蜜汁炒酸奶

面向对象四大特性

封装(Encapsulation)

封装也叫信息隐藏或者数据访问保护,也就是主要讲如何隐藏信息保护数据

实现方式

类通过暴露有限的访问接口,授权外部仅能通过类提供的方法来访问内部信息或数据。

需要编程语言提供权限访问控制语法来支持,比如Java中的private、protected、public关键字。

封装的意义:

  • 保护数据不被随意修改,提高代码的可维护性。
  • 仅暴露有限的必要接口,提高类的易用性。

抽象

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

抽象实现方式

抽象可以通过接口类(如Java的interface关键字语法)或者抽象类(Java中的abstract关键字语法)这两种语法机制来实现。

Java中abstract class表示的是"is a"关系,interface表示的是"like a"关系。

抽象存在的意义

  • 修改实现不需要改变定义。
  • 处理复杂系统的有效手段,能有效地过滤掉不必要关注的信息。

继承

继承用来表示类之间的is-a关系,分为两种模式:单继承和多继承。

单继承表示一个子类只能继承一个父类,多继承表示一个子类可以继承多个父类。

继承的实现方式

为了实现继承这个特性,编程语言需要提供特殊的语法机制来支持,如 Java 使用 extends 关键字来实现继承。

有些编程语言只支持单继承,不支持多重继承,比如 Java、PHP、C#、Ruby 等,而有些编程语言既支持单重继承,也支持多重继承,比如 C++、Python、Perl 等。

继承存在的意义

  • 最大的一个好处是代码复用。这一点也并不是继承所独有的,我们也可以通过其他方式来解决这个代码复用的问题,比如利用组合关系而不是继承关系
  • 人类认知的角度上来说,是一种 is-a 关系。我们通过继承来关联两个类,反应真实世界中的这种关系,非常符合人类的认知,而且,从设计的角度来说,也有一种结构美感。

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

多态

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

多态的实现方式

多态这种特性也需要编程语言提供特殊的语法机制来实现,比如继承、接口类、duck-typing。

只要两个类具有相同的方法,就可以实现多态,并不要求两个类之间有任何关系,这就是所谓的 duck-typing,是一些动态语言(如Python)所特有的语法机制。

而像 Java 这样的静态语言,通过继承实现多态特性,必须要求两个类之间有继承关系,通过接口实现多态特性,类必须实现对应的接口。

多态存在的意义

多态可以提高代码的扩展性和复用性,是很多设计模式、设计原则、编程技巧的代码实现基础。

附录

参考资料

设计模式之美

资料扩展

预览
Loading comments...
0 条评论

暂无数据

example
预览