簡體   English   中英

抽象類中的具體方法

[英]Concrete method in abstract class

我理解抽象類可能包含抽象和具體方法(即具有主體實現)。 我的問題是:子類可以繼承/覆蓋抽象超類的具體方法嗎? 其次,他們是否必須以與實現抽象方法相同的方式實現具體方法?

子類可以繼承/覆蓋抽象超類的具體方法嗎

如果它們不是final ,是的,它們可以被覆蓋。

其次,他們是否必須以與實現抽象方法相同的方式實現具體方法?

不,他們只需要實現/覆蓋抽象方法,否則抽象方法沒有意義。

子類可以繼承/覆蓋抽象超類的具體方法嗎?

如果子類與父類位於不同的包中,則子類將繼承所有標記為publicprotected的方法。 如果子類在同一個包中,則繼承private方法外的所有方法。

子類必須覆蓋/實現抽象方法,並且如果它們沒有被標記為final可以覆蓋/實現具體方法。

他們是否必須像繼承抽象方法一樣繼承具體方法?

不,他們不必實現具體的方法。 但是,它們可以覆蓋具體方法,除非它們沒有標記為final

一個具體的方法意味着,該方法具有完整的定義,但它可以在繼承的類中被覆蓋。 如果我們將此方法設為“final”,則它不能被覆蓋。 聲明一個方法或類“final”意味着它的實現已經完成。 必須覆蓋子類中的抽象方法,否則子類也將是抽象類並且必須聲明為抽象。

Java 中的具體方法與任何其他普通方法一樣。 不是抽象方法的方法在java中被稱為具體方法。 如果我們要執行這些具體方法,請創建類的實例(對象)並調用該特定方法。

如果您在類中聲明抽象方法,那么您也必須聲明類抽象。 在具體的類中不能有抽象方法。 在 Java 中,不可能實例化抽象類。 抽象類可能包含抽象和具體方法(即具有主體實現)。

是的,子類繼承/覆蓋抽象超類的具體方法,如果它們不是私有的、最終的或靜態的,它們可以被覆蓋。

,他們不必實現具體的方法。 但是,它們可以覆蓋具體的方法,除非它們沒有被標記為 final。

子類可以從抽象超類繼承具體方法嗎?

他們 >>do<< 繼承它們,除非它們覆蓋它們。 (除了private方法,它們在 Java 中永遠不會被繼承或覆蓋。)

子類可以覆蓋抽象超類的具體方法嗎?

是的,他們可以覆蓋它們。 (除了private方法,它們在 Java 中永遠不會被繼承或覆蓋。)但他們不必這樣做。

其次,他們是否必須以與實現抽象方法相同的方式實現具體方法?

如果您詢問子類是否必須“實現”在抽象超類中定義的具體方法:

不,他們沒有,但他們可以,如果他們這樣做是被稱為覆蓋

如果您問重寫具體方法是否與實現抽象方法相同:

不,不完全一樣。 在抽象方法的實現中,您通常不能使用super來委托在超類鏈上進一步定義的重寫方法。

如果您詢問具體方法的覆蓋是否與抽象方法的實現相同:

是的。 語法是一樣的。 (你不能在后一種情況下使用super委托;見上文。)


注意:當子類也是抽象的時,上述幾乎所有內容也是正確的; 即抽象超類的抽象子類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM