0
我想知道如何使用抽象類和接口的區別,這困擾了我一下:Java抽象類聲明throwable - 實現不強制執行它?
假設你有一個抽象類
public abstract class Animal {
//return the tail lenght of the animal
public abstract int getTailLength() throws IllegalStateException;
}
,承諾該抽象類的實現有一個方法所謂getTailLength()編譯器勢力擴展類@override抽象類並實現他們]像這樣:
public Snake extends Animal(){
@override
public int getTailLength(){
return 10;
}
}
編譯器是罰款與此又在抽象類時我們聲明想要getTailLenght()的實現,我們還提到我們希望它引發異常 - 但是在上面的代碼段中已經省略了。
我是否認爲在接口和'實現'聲明中這樣做是不允許的?
我想,因爲您使用@override註釋了方法,編譯器根本不在乎您做什麼,只要您有一個方法具有您在ADT中強制實施的名稱?它會檢查返回類型,爲什麼它不執行異常?
在聲明抽象方法可能拋出異常時有任何用處嗎?似乎多餘,如果它可以被忽略或特定於實現。雖然如果抽象方法的契約清楚地表明有一個先決條件,可能會很高興提到實現應該引發異常 – Runecreed