2012-11-22 26 views
0

我只是想知道如何使用子類來獲得超類的實現,例如。如何使用上傳或其他方法從子類實現超類?

class Animal { 
    void poo() { 
     System.out.println("general poo"); 
    } 
} 

class Horse extends Animal{ 
    void poo() { 
     System.out.println("horse poo"); 
    } 
} 

Animal animal1 = new Horse(); 
// using this I get the implementation of the Horse class's methods 
animal1.poo(); //should return horse poo 

試圖上溯造型它來獲得超類的實現,但無濟於事

((Animal)animal1).poo() // still returns the horse class's implementation of the method 

我如何使用animal1對象的超類實現?

+1

這將是可能的,如果它是C#。 –

+2

這是不可能的。請參閱http://stackoverflow.com/questions/2432249/accessing-super-class-function-using-subclass-object – Addict

回答

7

在Java中,除非新方法打算全部替換方法的所有外部調用,否則不應該重載超類方法。

在sublcass實現中,您可以使用例如super.toString()引用直接的超類方法。

+2

那。 'Horse.poo'應完全符合'Animal.poo'的合約/規格;如果不是這樣,那麼你的設計就會出現問題。 – SJuan76

+0

@Patricia。感謝你的回答。我想最好的辦法是創建一個方法來做super.method()。 :D –

+0

你需要決定哪個是在你的新子類中做普通的方式。這應該重寫超類方法。您可以添加一個新方法來執行新事物,也可以添加一個新方法來執行超類版本。但是,我建議仔細檢查您的設計 - 觸及這個問題往往是混淆了什麼方法意味着要做的一個徵兆。 –

1

除了這是不可能的,它沒有意義,試着重新分配你的班級。

+0

是的,我同意這一點。我申請工作時遇到的測試問題也是如此。 –