【多态产生的前提】
必须要有继承或者实现,要有方法重写,要有父类引用指向其子类对象。
【好处】
A:扩展性强;
B:重复利用强;
C:维护性强。
【弊端】
无法访问子类中特有的成员。不过,可以通过向下转型,来调用子类的特有成员。
【多态中成员访问的特点】
当父类引用访问非静态方法时,编译时期,看等号左边,运行时期,看等号右边。
访问其他成员时,编译时期和运行时期,都看等号左边。
这样设计的原理是:
在编译时期,编译器只检查是否存在语法错误,这个时候,还未建立对象(对象建立在运行时期),所以必须看等号左边。
除了访问非静态成员方法以外,运行时期,JVM静态地绑定到父类的引用中。而当访问非静态成员方法时,运行时期,JVM会动态地绑定到子类的对象中,调用子类的重写方法。
【多态中的转型】
A:向上转型
Fu f = new Zi(); 此时,子类类型和父类类型不一致,无法直接运算。此时,子类类型,会自动提升为Fu类型。
B:向下转型
Zi z = (Zi) f; 这样就能访问子类的特有功能。
【参数传递里的多态】
如一个方法,形参为一个Fu类型,而实际传参时,传递的是Fu的子类型对象。这样也是多态。如果在这个方法里面,想要使用子类特有的功能,必须对其向下转型。这个时候,就用到了一个关系运算符, instanceof,该关键字表示:引用变量是不是这个类创建的对象。
|
|