2017-04-04 45 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

这不完全是。我在这个问题下面发布的链接中提到了真正的答案 –