请看一下这段代码:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
这里我们将类的对象的引用分配给Polymorphism类型的变量Foo,经典的polmorphism.现在我们调用addFive已在类中重写的方法Polymorphism.然后我们从getter方法中打印变量值,该方法也已在类Polymorphism中被覆盖.所以我们得到答案为10.但是当公共变量a是SOP时我们得到答案3 !!
这怎么发生的?尽管引用变量类型是Foo但它指的是多态性类的对象.那么为什么访问f.a不会导致类中的a值Polymorphism被打印出来?请帮忙
你隐藏a的Polymorphism-你真正应该得到一个编译器的警告.因此,这是两个不同的a领域.与方法相比,字段不能是虚拟的.好的做法是根本没有公共字段,而只是改变私有状态(封装)的方法.
如果要将其设置为虚拟,则需要将其设置为具有访问器方法的属性(例如,您拥有的内容:) getA.
| 归档时间: |
|
| 查看次数: |
685 次 |
| 最近记录: |