多态中
非静态成员函数 编译看左边,运行看右边(动态绑定对象) 成员变量 编译运行都看左边 静态成员函数 编译运行都看左边(静态绑定类)
给你个例子
class Fu {
int num = 5;
void method1() {
System.out.println("fu method_1");
}
void method2() {
System.out.println("fu method_2");
}
static void method3() {
System.out.println("fu method_3");
}
}
class Zi extends Fu {
int num = 8;
void method1() {
System.out.println("zi method_1");
}
static void method3() {
System.out.println("zi method_3");
}
}
public class C{
public static void main(String args[]) {
Fu f = new Zi();
System.out.println(f.num);//5
多态中成员变量的特点,
无论编译和运行,都参考左边(引用变量所属的类)
f.method1(); //zi method_1//覆盖
f.method2(); //fu method_2
多态中非静态函数的特点,
在编译时期:参阅引用类型变量所属的类中是否调用的方法,如有,编译通过,如没有,编译失败
在运行时期:参阅对象所属的类中是否有调用的方法
简单的总结就是:成员函数在多态调用时,编译看左边,运行看右边
f.method3(); //fu method_3
在多态中,静态成员函数的特点,
无论编译和运行,都参考左边
当静态方法一进内存,就已经绑定在所属的类上了(静态绑定)
}
}
|