2011-05-26 152 views
0

請考慮下面的代碼片段。在不更改代碼的情況下調用父類方法

class X { 
    public String toString() { 
     return "Hi"; 
    } 
} 

public class Main { 
    public static void main(String[] args) { 
     Object obj = new X(); 
     System.out.println(obj.toString()); 
    } 
} 

我現在該如何調用Object類中的toString()方法,而無需修改代碼?或者我問的是不可能的?

+0

我想有一個基於反射的答案,但它可能是最好的*不*要想做到這一點! – 2011-05-26 09:57:01

+0

是的,我知道..我在技術性的採訪中被問到了這一點,並且讓我難住了。 – harihb 2011-05-26 10:02:09

回答

3

從外面看,你不能 - 這會違反封裝。 (想象一下toString()實際上是一種改變對象狀態的方法,並且子類想強制執行一些約束 - 您不應該跳過這些約束。)您可以從X本身(例如,

public String toString() { 
    return super.toString() + "Hi"; 
} 
+0

噢,在面試時我被問到了這個問題,當我告訴我會使用超級關鍵字時,面試官不同意我的看法。不管怎樣,謝謝:) – harihb 2011-05-26 09:59:33

相關問題