在多态中非静态成员函数的特点:
在编译时期:参阅引用类型变量所属的类中是否有调用的方法.如果有,编译通过,如果没有编译失败.
在运行时期:参阅对象所属的类中是否有调用的方法.
简单的总结就是:成员函数在多态调用时,编译看左边,运行看右边.
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用类型所属的类).
在多态中,静态成员函数的特点:
无论编译和运行,都参考左边.
class A {
int a = 1;
static int b = 2;
void show() {
System.out.println("A的show");
}
}
class B extends A {
int a = 3;
void show() {
System.out.println("B的show");
}
}
class abc {
public static void main(String[] args) {
A abc = new B();
B bcd = new B();
System.out.println("成员变量与引用的类型有关:"+abc.a);
System.out.println("成员变量与引用的类型有关:"+bcd.a);
System.out.println("静态成员变量与引用的类型有关:"+A.b);
System.out.print("方法与对象所属的类有关:");
abc.show();
}
}
结果
成员变量与引用的类型有关:1
成员变量与引用的类型有关:3
静态成员变量与引用的类型有关:2
方法与对象所属的类有关:B的show