[英]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.