今天遇到了一个很有意思的问题,父类和子类都定义了一个同名变量,声明一个父类类型a指向子类实例时,a.变量 = 父类的值
代码
public class Father {
public int i = 1;
public int f = 2;
public int getI() {
return i;
}
public Father() {
System.out.println("father construct..");
}
}
public class Son extends Father {
public int i = 111;
public int s = 222;
public Son() {
System.out.println("son construct..");
}
@Override
public int getI() {
return i;
}
public static void main(String[] args) {
Father father = new Son();
System.out.println(father.i);
System.out.println(father.getI());
}
}
当子类重写getI()方法时,控制台输出
控制台输出:
当子类不重写getI()方法时,控制台输出:
可以看到 ,调用了父类的方法,返回了父类的i值
冷静分析
打个断点看看