请看一下这段代码:
class Foo {
public int a;
public Foo() {
a = 3;
}
public void addFive() {
a += 5;
}
public int getA() {
System.out.println("we are here in base class!");
return a;
}
}
public class Polymorphism extends Foo{
public int a;
public Poylmorphism() {
a = 5;
}
public void addFive() {
System.out.println("we are here !" + a);
a += 5;
}
public int getA() {
System.out.println("we are here in sub class!");
return a;
}
public static void main(String [] main) {
Foo f = new Polymorphism();
f.addFive();
System.out.println(f.getA());
System.out.println(f.a);
}
}
在这里,我们将类对象的引用分配给Polymorphism
类型变量Foo
,经典多态。现在我们调用addFive
已在 class 中覆盖的方法Polymorphism
。然后我们从一个 getter 方法打印变量值,该方法在类多态性中也被覆盖。所以我们得到答案为 10。但是当公共变量a
被 SOP'ed 时,我们得到答案 3!
这怎么发生的?即使引用变量类型是 Foo 但它指的是多态类的对象。那么为什么访问f.a
不会导致类中的 a 值Polymorphism
被打印出来呢?请帮忙