- 面向对象的特征
封装、继承和多态
封装:
定义:封装就是将数据或函数等集合在一个个的单元中(我们称之为类)。被封装的对象通常被称为抽象数据类型。
优点:1、保护数据成员,不让类以外的程序直接访问或修改,只能通过提供的公共的接口访问==>数据封装。
2、方法的细节对用户是隐藏的,只要接口不变,内容的修改不会影响到外部的调用者==>方法封装。
3、良好的封装可以降低程序的耦合度。
类成员的修饰符
访问修饰符 | 同一个类 | 同包 | 不同包,子类 | 不同包,非子类 |
private | √ | |||
default | √ | √ | ||
protect | √ | √ | √ | |
public | √ | √ | √ | √ |
继承:
定义:继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。继承所描述的是“is-a”的关系。
特点:
1、子类拥有父类非private的属性和方法
2、子类可以添加自己的方法和属性,对父类进行扩展
3、子类可以重新定义父类的方法
缺点:
1、父类变动,子类就会跟着变动
2、继承破坏了封装,父类对子类机会是透明的
3、继承是强耦合
《Think in java》中提到:问一问自己是否需要从子类向父类进行向上转型。如果必须向上转型,则继承是必要的,但是如果不需要,则应当好好考虑自己是否需要继承。
构造函数:
1、子类无法继承父类的构造函数
2、创建子类时候,编译器会自动调用父类的无参构造函数
3、如果父类没有无参构造函数,需要在子类的构造函数中第一行用super调用父类的构造函数
多态: