【总结】
当一个类是另一个类中的一种时,可以通过继承,来扩展功能。
如果从父类具备的功能内容需要子类特殊定义时,使用重写。
【子父类中构造函数的特点】
当子父类都有构造函数时,发现结果为:
fu constructor run
zi constructor run
先执行了父类的构造函数,再执行子类的构造函数。
判断下面哪个有问题:从右边往左边念。
Fu f = new Fu();
Zi z = new Zi();
Fu f = new Zi(); //多态
Zi z = new Fu(); //报错
(2)多态的前提:
A:要有继承或者实现关系。
B:有方法重写。
因为一般都是抽象类或者接口的多态。
C:要有父类/父接口的引用指向子类对象。
(3)多态访问的成员特点:
Fu f = new Zi();
A:成员变量
编译看左边,运行看左边。
B:成员方法
编译看左边,运行看右边。
C:静态方法
编译看左边,运行看左边。
(4)多态的好处和弊端:
A:好处
提高了程序的可维护性和可扩展性。
维护性:继承保证
扩展性:多态保证
B:弊端
父类/父接口不能访问子类特有功能。
(5)多态中的类型转换:
A:向上转型
Fu f = new Zi();
B:向下转型
Zi z = (Zi)f;
举例:孔子装爹。
(6)多态的体现形式:
A:具体类多态
class Fu {}
class Zi extends Fu {}
Fu f = new Zi();
B:抽象类多态
abstract class Fu {}
class Zi extends Fu {}
Fu f = new Zi();
C:接口多态
interface Inter {}
//接口的实现类命名:接口名+Impl
class InterImpl implements Inter{}