1,成员变量:当子父类有同名成员变量时,多态调用时,只看调用该成员变量的引用所属于的类中的成员变量。简单说:无论编译或运行,都看等号的左边就行了。
class FU { int num=1; } class ZI extends FU { int num=2; } class test{ public static void main(String[] args){ FU f=new ZI(); int a=f.num; System.out.println(a); } }/*
运行结果输出为1;*/
2,成员函数:当子父类有同名成员函数时,多态调用时,编译时看的是引用变量所属的类中的方法;运行时,看的是对象所属的类中的方法。简单说:编译看左边,运行看右边。
class FU { int num=1; void show(){ System.out.println("FU的show方法"); } } class ZI extends FU { int num=2; void show(){ System.out.println("ZI的show方法"); } } class TEST{ public static void main(String[] args){ FU f=new ZI(); f.show(); } } //运行结果为输出ZI的show方法
3,静态函数:当子父类有同名静态函数时,多态调用时,编译和运行是看引用变量所属的类中的方法。简单书:编译运行看左边。(真正调用静态方法是不需要对象的,直接类名调用)
class FU { int num=1; void show(){ System.out.println("FU的show方法"); } static void staticMethod(){ System.out.println("Fu的静态方法"); } } class ZI extends FU { int num=2; void show(){ System.out.println("ZI的show方法"); } static void staticMethod(){ System.out.println("ZI的静态方法"); } } class TEST{ public static void main(String[] args){ FU f=new ZI(); f.staticMethod(); } } //运行结果输出Fu的静态方法