编译看左边,运行看右边
成员变量,静态方法看左边;非静态方法:编译看左边,运行看右边
public class Father {
public String i="Father";
public static int o=0;
public void printString(){
System.out.println("FatherString");
}
public static void printStaticString(){
System.out.println("FatherStaticString");
}
public String getI() {
return i;
}
}
class Son extends Father{
public String i="Son";
public static int o=1;
public void printString(){
System.out.println("SonString");
}
public static void printStaticString(){
System.out.println("SonStaticString");
}
public String getI() {
return i;
}
public static void main(String[] args) {
Father father = new Son();
System.out.println(father.i);
System.out.println(father.o);
father.printString();
father.printStaticString();
System.out.println(father.getI());
System.out.println("-------");
Son son = new Son();
System.out.println(son.i);
System.out.println(son.o);
son.printString();
son.printStaticString();
System.out.println(son.getI());
}
}
Father//父类引用调用父类普通成员变量
0//静态自不必说
SonString//普通成员方法运行时为子类同名成员方法
FatherStaticString//静态成员方法自不必说
Son//普通成员方法运行时为为子类同名成员方法,方法体调用的成员变量亦为子类成员变量
-------
Son
1
SonString
SonStaticString
Son
所以,只需注意普通成员方法即可。
另外,这里也体现出了为什么父类引用不能调用子类特有的成员,实质上父类引用调用的是自己的成员,只不过普通方法就体现了运行时多态。