2017-04-04 5 views
0

このコードがどのように正しく動作するかを理解することには問題があります。内部クラスが外部クラスを継承しているときのスーパーと比較して

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を出力しますが、私はthis.numsuper.numを変更した場合、私はThe field Outer.num is not visibleを言って、エラーを取得します。もちろん、numpublicに設定してもコードは機能します。私はちょうどそれがsuperで動いているが、thisで動かない理由を理解できない。

答えて

0

ベースクラスのJavaプライベート変数では、他のクラスには表示されません。派生クラスに対しては表示されません。代わりにprotectedを使用してください。

私は厳密にはわかりませんが、私はそのスーパークラスを呼び出すことをお勧めします。あなたのクラスは基本クラスそのもののように動作します。たぶん、Javaの専門家が私の提案をチェックできます。

+0

これは正確ではありません。本当の答えは私がこの質問の下に掲示したリンクで言及されています –

関連する問題