簡體   English   中英

覆蓋接口的變量?

[英]Overriding interface's variable?

正如我從各種Java書和教程中讀到的那樣,在接口中聲明的變量是常量,不能被覆蓋。

我做了一個簡單的代碼來測試它

interface A_INTERFACE
{ 
    int var=100; 
}

class A_CLASS implements A_INTERFACE
{ 
    int var=99; 
    //test
    void printx()
    {
        System.out.println("var = " + var);
    }
}

class hello
{

    public static void main(String[] args)
    {
        new A_CLASS().printx();
    }
}

並打印出var = 99

var會被覆蓋嗎? 我很困惑。 感謝您的任何建議!


非常感謝大家! 我對這個界面事物還很陌生。 “影子”是理解這一點的關鍵詞。 我查找了相關材料並立即了解。

由於接口中的常量也是靜態的,因此它不會被覆蓋,而是會產生陰影,並帶來更多混亂。

嘗試這個:

A_INTERFACE o = new A_CLASS();
System.out.println(o.var);

您應該收到有關以非靜態方式訪問靜態字段的編譯時警告。

現在這個

A_CLASS o = new A_CLASS();
System.out.println(o.var);
System.out.println(A_INTERFACE.var);  // bad name, btw since it is const

您沒有覆蓋變量,而是使用在更特定范圍內聲明的全新實例變量對其進行了陰影處理。 這是在您的printx方法中打印的變量。

接口中任何變量的默認簽名是

public static final ...

因此,您無法以任何方式覆蓋它。

您在該接口中聲明的變量對於實現它的類是不可見的。

如果在靜態和最終變量(即常量)中聲明變量,則實現者可以看到該變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM