面向对象的四大特性,对于他们的定义很熟悉,但是他们解决了哪些问题?
封装---信息隐藏,数据保护
外部仅能通过类提供的方式,访问内部的信息或者数据,对于java来说,是属性字段私有化,访问函数公有,甚至部分属性字段没有的一种结构形式。
解决的问题
封装是对信息和数据的隐藏,而抽象就是对实现方法的隐藏,践行的是基于接口为非实现、开闭原则、代码解耦的思想。对于java来说是接口类、抽象类,还可以包括函数,因为函数本身就是对实现方法的封装,使用者只需要了解能够做什么,对于实现的细节不需要具体的掌握。
因为抽象的思想不止在面向对象编程中存在,可以说是一个普遍的方法,所以有时候也不把它看作是一个面向对象的特性
意义
简单的说---is a
好处就是代码复用、符合直觉关系,在java中是extends的单继承。坏处是继承层次太深、太复杂时,可读性(需要查看父类方法)、可维护性(父类修改子类也产生修改)差。
多用聚合少用继承?
父类引用指向子类实现---子类可以替换父类
实现方式:
解决的问题:
原文:https://www.cnblogs.com/kmchen/p/14916144.html