Oro*_*102 1 java oop upcasting
试图理解Java中的upcasting.最近发现奇怪的行为.
例:
public class A extends B {
public int i = 2;
public void printI() {
System.out.println("print i = " + this.i);
}
public static void main(String[] args) {
B a = new A(); // <- upcasting here
System.out.println("i = " + a.i);
a.printI();
}
}
class B {
public int i = 1;
public void printI() {}
}
//Output:
//i = 1
//print i = 2
Run Code Online (Sandbox Code Playgroud)
似乎,upcasted对象有两个独立的"i"属性.一个"i"可以直接访问(ai),另一个通过子类(a.printI())的方法访问.
看起来像upcasted对象从超类和子类的方法获取属性.
对象如何拥有两个独立的"我"?!
似乎,upcasted对象有两个独立的"i"属性.
首先,值得明确术语.没有"upcasted object"这样的东西 - 而"i"是每个和中的一个字段.AB
但是,这里有两个单独的字段.它不像一个字段"覆盖"另一个或类似的东西.
目前还不清楚是什么你想达到的,但宣言i中A 阴影的声明i中B.有关更多信息,请参见Java语言规范的第6.4节.
请注意,在几乎所有情况下,字段都应该是私有的 - 此时隐藏真的无关紧要,因为您不会尝试引用未在您编写的类中声明的变量.
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |