2013-01-02 111 views
1

同名訪問值我有abstract class和interface這樣在接口和抽象類的Java

abstract class ParentClass 
{ 
    int VALUE; 
    public abstract void display(); 
    public void display2() 
    { 
     System.out.println("this is abstract class method"); 
    } 
} 

interface parentInterface 
{ 
    int VALUE=88; 
    abstract void display(); 
    void display2(); 
} 

子類繼承和上述實現類似以下

class ChildClass extends ParentClass implements parentInterface 
{ 

    ChildClass() 
    { 
     super.VALUE=0; 
     //VALUE=0;  //<=will give ambiguous property 
    } 
    @Override 
    public void display() 
    { 
     System.out.println("Current Class-"+this.getClass()); 
     System.out.println("Integer value-"+super.VALUE); 
    } 
    public void display2() 
    { 
     //to call the method of abstract class 
     //call by using super.display2(); 
     System.out.println("this is implemented method"); 
    } 
} 

所以,我的問題是我如何訪問ChildClass中的接口VALUE變量?

回答

2

您可以通過接口使用parentInterface.VALUE訪問VALUE,因爲接口中的變量爲public static finalby default

抽象類的VALUE可以使用this.VALUE訪問,因爲它是一個成員變量。

+0

THIS.VALUE給出模棱兩可 –

2

接口中的變量隱含地爲public static final

static - 因爲接口不能有任何實例。

final - 分配給接口變量的值是一個真正的常量,不能由程序代碼重新分配。

接口變量可以使用<Interface>.VALUE訪問,而來自父類的變量是繼承的,因此可以使用this.VALUE訪問。

如果任何亞類類正在執行具有實例 成員並且如果兩個子類和接口都在同一個包 然後該靜態成員可以從子類即使使用接口名稱被訪問而不 的接口。

這就是爲什麼你得到模棱兩可的錯誤。請把接口在其他一些包,然後它不應該展示在其他這樣的錯誤,你將不得不訪問它像super.VALUE

+0

THIS.VALUE給出模棱兩可的 –

+0

更新的答案解釋原因 – Rahul