口诀:
成员变量和静态方法:编译看左边,运行还看左边
非静态成员方法:编译看左边,运行看右边
用下面的例子演示了上面的口诀:
public class Fu {
int a = 10;
public static void staticMethod() {
System.out.println("父类中的静态方法");
}
void method() {
System.out.println("父类方法");
}
public class Zi extends Fu {
int a = 15;
void method() {
System.out.println("子类方法");
}
public static void staticMethod() {
System.out.println("子类中的静态方法");
}
public static void main(String[] args) {
Fu obj = new Zi();
System.out.println(obj.a);// 10
obj.method();// 子类方法
obj.staticMethod();// 父类中的静态方法
}
}
下面的例子很好地阐述了什么叫编译看左。
public class Fu {
public void methodFu(){
System.out.println("父类方法");
}
}
public class Zi extends Fu {
public void methodZi() {
System.out.println("父类方法");
}
}
public class Test {
public static void main(String[] args) {
Fu fu = new Zi();
fu.methodZi();//报错,错误写法,编译看左边,没有这个方法
}
}