2017-04-04 87 views
0

我有一些麻煩理解這個代碼如何精確地工作。超級VS這個當內部類擴展外部類

public class Outer { 

    private int num = 0; 

    public void setNum(int num) { 
     this.num = num; 
    } 

    public int getNum() { 
     return num; 
    } 

    public Outer inner() { 
     return new Inner(); 
    } 

    private class Inner extends Outer { 

     public int getNum() { 
      // do something extra 
      return super.num; // changing to 'this.num' throws an error 
     } 
    } 
} 

運行

Outer o = new Outer(); 
    Outer i = o.inner(); 
    o.setNum(4); 
    i.setNum(5); 
    System.out.println(i.getNum()); 

正確地輸出5,但如果我改變super.numthis.num我得到一個錯誤說The field Outer.num is not visible。當然,如果我將num設置爲public,代碼確實可行。我只是不明白爲什麼它運行super,但不是this

回答

0

在基類的Java私有變量是不可見的任何其他類,即使是派生類。 (使用保護代替)

我不完全知道,但我建議,調用super,你的類的行爲就好像它是基類本身。也許一個java專家可以檢查我的建議。

+0

這不完全是。我在這個問題下面發佈的鏈接中提到了真正的答案 –