2016-05-15 43 views
-1

所以我有以下代碼超類方法:從調用子類的實例

class Super { 
    private String name="super"; 
    public String name(){ 
     return this.name; 
    } 
} 
class Sub extends Super { 
    private String name = "sub"; 
} 
public class Main { 
    public static void main(String[] args) { 
     System.out.println(new Sub().name()); 
    } 
} 

我所得到的是結果是:超。 我不知道爲什麼?!是不是方法name()應該調用this被調用的對象,因爲Sub延伸Super那麼它應該能夠使用它的成員呢?!

+0

一個簡單的規則要記住:**字段不是多態**,只有方法是(除非它們是私有的,最終的或靜態的)。 – Pshemo

回答

1

你可能在想,在Subname成員字段應該是Super覆蓋name成員字段。它不會:字段不能在Java中重寫。此外,您已將這兩個字段定義爲private,這意味着該成員僅對該類的其他成員可見(並且而不是派生類或其他類的成員)。因此,在您的代碼中,Supername字段有其自己的私人定義,而Sub有其自己完全不同的私人定義。也不知道另一個的存在。

Java中的標準做法是使用獲取器和設置器來訪問內部數據。如果需要,您可以在派生類中自由覆蓋它。

+2

Java中沒有'virtual'關鍵字。 – SamTebbs33

+0

@ SamTebbs33對不起,腦屁。我每天都使用Java,C++,C#和其他幾種語言,有時很難讓它們保持直線! ;) – TypeIA

+0

我認爲這是問題! :) – SamTebbs33