掌握了多态的基本使用后,那么多态出现后类的成员有啥变化呢?前面学习继承时,我们知道子父类之间成员变量有了自己的特定变化,那么当多态出现后,成员变量在使用上有没有变化呢?
多态出现后会导致子父类中的成员变量有微弱的变化。看如下代码
class Fu {
int num = 4;
}
class Zi extends Fu {
int num = 5;
}
class Demo {
public static void main(String[] args) {
Fu f = new Zi();
System.out.println(f.num); //4
Zi z = new Zi();
System.out.println(z.num); //5
}
}
1. 多态成员变量
当子父类中出现同名的成员变量时,多态调用该变量时:
编译时期:参考的是引用型变量所属的类中是否有被调用的成员变量。没有,编译失败。(参考父类中有没有这个变量,如果 有,编译成功,没有则编译失败)
运行时期:也是调用引用型变量所属的类中的成员变量。(运行的是父类中的变量值)
简单记:编译和运行都参考等号的左边。编译运行看左边。(编译运行全看父类)
多态出现后会导致子父类中的成员方法有微弱的变化。看如下代码
class Fu {
int num = 4;
void show() {
System.out.println("Fu show num");
}
}
class Zi extends Fu {
int num = 5;
void show() {
System.out.println("Zi show num");
}
}
class Demo {
public static void main(String[] args) {
Fu f = new Zi();
f.show();
}
}
2. 多态成员方法
编译时期:参考引用变量所属的类,如果没有类中没有调用的方法,编译失败。(参考父类中有没有这个方法,如果 有,编译成功,没有则编译失败)
运行时期:参考引用变量所指的对象所属的类,并运行对象所属类中的成员方法。(运行的是子类的重写方法)
简而言之:编译看左边,运行看右边。(编译看父类,运行看子类)