如何顯示抽象類 Confused("ConfusedValue") 中的“name”非靜態欄位的值?我嘗試了 3 種方法,但都有錯誤。我只能顯示 Confusable 的名稱 value("ConfusableValue")
interface Confusable {
String name = "ConfusableValue";
String confuse();
}
abstract class Confused {
String name = "ConfusedValue";
abstract Object confuse();
}
public class Test extends Confused implements Confusable {
public static void main(String[] args) {
Test a = new Test();
// --- OK
System.out.println("Confusable.name: " Confusable.name);
// --- Errors
System.out.println("name: " name); // Error : The field name is ambiguous
System.out.println("Confused.name: " Confused.name); // Error : Cannot make a static reference to the non-static field Confused.name
System.out.println("a.name: " a.name); // Error : The field a.name is ambiguous
}
}
uj5u.com熱心網友回復:
欄位名稱不被繼承。他們只是互相影射。這是編譯器關心的問題,但就運行時而言,它們都是獨立存在的,并且恰好共享一個名稱。
所以我們只需要使編譯器看起來正確的型別,我們可以通過顯式向上轉換來做到這一點。這些是向上轉換(即擴大轉換),因此它們是安全的并且保證成功。
System.out.println("The method confuse returns: " ((Confused)a).name);
System.out.println("The method confuse returns: " ((Confusable)a).name);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/446639.html
上一篇:子類繼承超類并添加屬性
下一篇:抽象/靜態類的類實體化和變數共享
