當實例化嵌套類時,它如何引用外部類?它是否總是擴展外部類或以另一種方式引用它?我被告知內層擴展了外層,但爲什麼下面的例子不起作用?在Java中,嵌套類和它的外部類之間有什麼關係?
例如:
public class OuterClass {
public String fruit = "apple";
public class InnerClass {
public String fruit = "banana";
public void printFruitName(){
System.out.println(this.fruit);
System.out.println(super.fruit);
}
}
}
上面不與用於super.fruit
一個錯誤說,「水果」無法解析編譯。但是如果指定了內部類擴展外部類,那麼它的工作原理:
public class OuterClass {
public String fruit = "apple";
public class InnerClass extends OuterClass {
public String fruit = "banana";
public void printFruitName(){
System.out.println(this.fruit);
System.out.println(super.fruit);
}
}
}
這似乎表明,除非特別指定的內部類不會擴展外部類。
請問你能澄清你最後一句話嗎?我不知道'OuterClass.this',並且在這裏的問題中發佈的代碼中使用它,但是當我有內部類擴展外部類時,那麼'OuterClass.this.fruit'和'super.fruit '給我外部實例的'水果'價值。 –
@MikeB這個*看起來就是這種情況,即使它不是,因爲當創建一個新的OuterClass實例時,成員被設置(相同的值) - 例如,對於* real * OuterClass實例和InnerClass實例的超類。 OuterClass實例的'fruit'成員變量在初始化之後,但在創建內部類實例之前更改 - 然後您將看到不同之處。 – user2864740
你說得對,我甚至在我的原始代碼中這樣做了,但是我看到了梨,並忽略了第二組輸出應該有2個梨的事實! –