0
class Boo {
    public int a = 3;

    public void addFive() {
        a += 5; 
        System.out.print("f "); 
    }
}

class Bar extends Boo {
    public int a = 8;
    public void addFive() { 
        this.a += 5;
        System.out.print("b " ); 
}

public static void main(String[] args) {
    Boo f = new Bar();
    f.addFive();
    System.out.println(f.a);
}
4

3 回答 3

3

您不会覆盖实例字段,而只会隐藏它们。因此,当您访问Boo引用上的实例字段时,您将获得仅在Boo类中声明的字段。

当你aBar构造函数中增加时:

this.a += 5;

它正在增加a声明的 in Bar,因为它隐藏了a声明的字段 in Boo

于 2013-02-09T22:10:40.403 回答
1

因为你用过Boo

Boo f=new Bar();

引用和字段不是多态的

于 2013-02-09T22:10:05.533 回答
0

aBar 中的字段是 Boo 中的阴影字段a。这是一个单独的字段,但因为它具有相同的名称,所以您必须在 Boo bysuper.a中引用该字段才能从 Bar 访问它。

上一个问题很好地涵盖了阴影。

于 2013-02-09T22:12:58.170 回答