里氏替换原则LSP
在一个软件系统中,子类对象可以替换所有使用的父类对象,且程序行为没有变化。
instanceof关键字
A instanceof B
A必需是具体实例,B是一种类(或接口),返回boolean值。
多态
同一个引用类型,使用不同的实例而执行不同操作。
使用多态实现思路
- 编写父类;
- 编写子类,子类重写父类方法;
- 运行时,使用父类引用指向子类对象。
多态中的成员访问特点
Fu fu = new Zi();
成员变量:编译看左边,运行看左边。
构造方法:构造子类对象的时候,访问父类的构造方法,对父类的数据进行初始化,再对子类的数据进行初始化。
成员方法:编译看左边,运行看右边。
静态方法:编译看左边,运行看左边。(静态和类相关,算不上重写,所以访问还是左边的。)
多态的好处和弊端
好处
- 提高了程序的维护性(由继承保证)。
- 提高了程序的扩展性(由多态保证)。
弊端
- 不能访问子类特有功能(成员变量)。
我就想使用子类特有功能,也可以,有两种方法:
- 创建子类对象调用方法。(很多时候不合理,而且占内存。)
- 把父类的引用强制转换为子类的引用。(向下转型。)
多态中的转型问题
向上转型:从子到父,父类引用指向子类对象。
Fu f = new Zi();
向下转型:从父到子,父类引用转为子类对象。
Fu f = new Zi();
Zi z = (Zi)f;//要求该f必须是能够转换为Zi的。