簡體   English   中英

定義一個沒有任何抽象方法的抽象類

[英]Defining an abstract class without any abstract methods

我可以在不添加抽象方法的情況下定義抽象類嗎?

當然。

聲明一個抽象類只意味着你不允許它自己被實例化。

聲明方法抽象意味着子類必須為該方法提供實現。

這兩個是獨立的概念,但顯然您不能在非抽象類中擁有抽象方法。 您甚至可以擁有帶有final方法的抽象類,但不能反過來。

是的,你可以做到。 你為什么不試試這樣做呢?

是的,你可以。 java中使用的抽象類表示不能創建該類的對象。 子類必須為該方法提供一個抽象方法。

因此,您可以輕松定義一個抽象類,而無需任何抽象方法。

例如:

public abstract class AbstractClass{

    public String nonAbstractMethodOne(String param1,String param2){
        String param = param1 + param2;
        return param;
    }

    public static void nonAbstractMethodTwo(String param){
        System.out.println("Value of param is "+param);
    }
}

這很好。

是的,您可以在沒有任何抽象方法的情況下創建抽象類,沒有抽象方法的抽象類的最佳示例是 HttpServlet
抽象方法是一種沒有主體的方法,如果您在類中聲明了至少一個方法,則該類必須聲明為抽象類,但如果您聲明了抽象類,則不必在類中聲明抽象方法。

你不能創建抽象類的對象,這意味着它不能被實例化。

是的,我們可以有一個沒有抽象方法的抽象類,因為兩者都是獨立的概念。 聲明一個抽象類意味着它不能被單獨實例化,只能被子類化。 聲明方法抽象意味着方法將在子類中定義。

是的,您可以聲明一個不能單獨使用已經有實現的方法實例化的類。 如果您想在將來添加抽象方法,或者如果您不希望類被直接實例化,即使它沒有抽象屬性,這將非常有用。

是的,我們可以聲明一個沒有任何抽象方法的抽象類。 將類聲明為抽象類的目的不是實例化該類。

所以兩種情況

1) 具有抽象方法的抽象類。

這些類型的類,我們必須從這個抽象類繼承一個類,並且必須覆蓋我們類中的抽象方法,例如:GenricServlet 類

2) 沒有抽象方法的抽象類。

這些類型的類,我們必須從這個抽象類繼承一個類,例如: HttpServlet 類這樣做的目的是雖然你如果你不在子類中實現你的邏輯你可以獲得父邏輯

請檢查 HttpServlet 源代碼

你可以,我心中的問題是你更應該。 從一開始,我就會說沒有一成不變的答案。 針對您當前的情況做正確的事情。

對我來說,繼承意味着一種“is-a”關系。 想象一個狗類,它可以通過更專業的子類型(阿爾薩斯、貴賓犬等)進行擴展。 在這種情況下,使狗類抽象可能是正確的做法,因為子類型是狗。 現在讓我們想象一下狗需要項圈。 在這種情況下,繼承沒有意義:在狗和項圈之間建立“is-a”關系是無稽之談。 這絕對是一種'has-a'的關系,領子是合作對象。 將項圈抽象化以便狗可以擁有一個是沒有意義的。

我經常發現沒有抽象方法的抽象類真正表達了一種“has-a”關系。 在這些情況下,我通常會發現不使用繼承可以更好地分解代碼。 我還發現沒有抽象方法的抽象類通常是一種代碼味道,至少應該會導致在代碼審查中提出問題。

同樣,這完全是主觀的。 很可能存在沒有抽象方法的抽象類有意義的情況,這完全取決於解釋和論證。 為您正在做的任何事情做出最好的決定。

是的,你可以這樣做。

聲明類抽象意味着該類不會被任何其他類實例化。

並且其中應該至少有一個抽象方法,並且如果您不聲明方法,則可以在該類中聲明抽象方法的含義。

例子:

public abstract class abs {

    protected int cx = 0, cy = 0;

    public void p() {
        System.out.print("hello");
    }
}

這肯定會起作用。

是的,你可以。 有時你可能會被問到這個問題,這樣做的目的是什么? 答案是:有時我們必須限制類自己實例化。 在這種情況下,我們希望用戶擴展我們的抽象類並實例化子類

是的,您可以在沒有抽象方法的情況下定義抽象類。 但是,如果內部沒有方法,您最好使用接口

實際上,抽象類沒有任何抽象方法是沒有意義的。 抽象類就像一個父親。 這個父親有一些屬性和行為,當你小時候想成為父親的孩子時,父親說孩子(你)一定要這樣,這是我們的MOTO,如果你不想這樣做,你不是我的孩子。

暫無
暫無

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

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