2012-08-07 62 views
1

就超類中使用子類中的相同屬性定義的屬性值而言,該屬性被定義爲受保護的,那麼使用super或這個沒有任何區別? 那麼爲什麼語言真的有這些訪問屬性的方式?是否有他們將有不同的價值的情況。在超類中使用super或this在子類中訪問屬性?

class A{ protected int a = 15; 
    } 

    class B{ 
    public void printA() 
{ 
    System.out.print(super.a) // prints 15 
    System.out.print(this.a) // prints 15 
} 

}

+1

B擴展A * - 否則編譯錯誤 – evg 2012-08-07 20:24:34

+0

是的。沒有在這裏輸入所有內容。 – Phoenix 2012-08-07 20:25:18

回答

2

這種情況下,它沒有任何區別。但是,只要你改變的方法,而不是變量,並在B其中陰影的一個在A介紹另外一種方法,然後它的確與衆不同:

class A { 
    protected int a = 15; 
} 

class B extends A { 
    private int a = 10; 

    public void printA() { 
     System.out.println(super.a); // prints 15 
     System.out.println(this.a); // prints 10 
    } 
} 

這是比字段的方法比較常見但 - 往往壓倒一切的實現需要調用父類的實現作爲其實現的一部分:

public void foo() { 
    super.foo(); 
    // Now do something else 
} 

我個人建議避免非私有領域,在該點字段部分變得無關緊要。

請參閱section 6.4.1 of the JLS瞭解更多關於陰影的內容。

+1

理想的是,成員變量不可覆蓋。 :[看到這個其他線程](http://stackoverflow.com/q/685300/233495) – baraber 2012-08-07 20:38:19