请说说面向对象的特征?封装、继承、多态分别说一下,以及它们的好处?
- 面向对象的三大特征:封装、继承和多态。
- 封装
属性私有,方法(操作属性)公开,外部对象仅能通过访问方法操作属性。
Java 提供了四种修饰符(`private`,`default`,`protected`,`public`)赋予外部对象不同的访问权限。
图 1
- 继承
世间万物都可以看做是一个对象。同一类型的对象之间一般都会具有一定数量的共性(父类)和一些各自的特性(子类扩展)。
1. 子类拥有父类的所有属性和所有方法; // 共性,对于父类中的私有属性和私有方法,子类只具备拥有权,而不具备访问权。
2. 子类可以拥有自己的方法和属性; // 特性,子类扩展
3. 子类可以用自己的方式实现父类的方法。 // 方法重写
- 多态
多态:父类的引用指向子类的实例。
1. 对象类型和引用类型之间具有继承(类)/ 实现(接口)的关系; // 关键字:继承、实现(父子类关系成立)
2. 引用类型变量发出的方法调用的到底是哪个类中的方法,必须在程序运行期间才能确定 {
举个例子来说,假设有一个父类 Animal 和一个子类 Dog 继承自 Animal 。我们声明一个 Animal 类型的引用变量 a,并将其指向一个 Dog 对象。当我们通过变量 a 调用一个方法时,编译器无法确定方法执行的是 Animal 类中的方法还是 Dog 类中的方法,因为 a 可以指向任何 Animal 类的子类对象。只有在程序运行时,根据 a 所指向的具体对象是 Dog,才会调用 Dog 类中对应的方法。
};
3. 多态不能调用 “只在子类存在但在父类不存在” 的方法;
4. 如果子类重写了父类的方法,真正执行的是子类覆盖的方法;如果子类没有重写父类的方法,执行的是父类的方法。
- 转型
1. 向上转型:多态;
2. 向下转型:强制转换 {
解决 [ 多态不能调用 “只在子类存在但在父类不存在” 的方法 // 编译错误 ] 这一问题
}