首先上代码
public class A {
protected String value = "123";
public A(){
System.out.println("A");
}
public String getValue(){
return value;
}
}
public class B extends A{
protected String value = "456";
public B(){
System.out.println("B");
}
public static void main(String[] args){
A a = new B();
System.out.println(a.getValue());
a = new A();
}
}
编译后输出的是什么呢?
A
B
123
A
为什么呢?
可以看出在new一个B对象时,是先构造父对象(输出A),再构造子对象(输出B)
而之所以输出123是因为,从父类继承来的没有被子类覆盖的方法操作的是继承于父类的被隐藏的变量,也就是123
如果子类中覆盖了此方法,则返回的是456