簡體   English   中英

抽象類用法

[英]Abstract class usage

在應用程序中使用抽象類時,我遇到了兩種可能的方法來訪問抽象類中的數據。 是否因為一個抽象類的上下文而優先於另一個?

public abstract class Example {

       private String name;

       public Example(String name) {
            this.name = name;
       }

       //other methods that can be overridden in child classes
}

public class ExampleTwo extends Example {

       public ExampleTwo() {
            super("ExampleTwo");
       }
}

還是在給定相同輸出的情況下,簡單地用值覆蓋返回方法。 例如:

public abstract class Example {

       public abstract String getName();

       //other methods that can be overridden in child classes
}

public class ExampleTwo extends Example {

       @Override
       public String getName() {
             return "ExampleTwo";
       }

}

您正在描述兩種不同的情況。 第一個name是一個變量,該變量在構造函數中設置並使用其getter讀取。 第二個定義了一個getName方法,該方法可以返回任何內容,例如隨機字符串。

首先,這兩種方法是完全不同的。 第一個示例永遠不會將name變量公開給它的子級,因為它是private 您的第二個示例要求每個孩子都將getName作為其API的一部分來實現。

最終,這取決於您要完成什么。

在第一種情況下,我假設您正在為類建立某種常規狀態,並且您的孩子需要向父級提供一些元數據,以便父級的方法可以正確響應。 想想動物等級制度; 您可以在父makeSound中定義makeSound ,但每個孩子都會告訴它如何說話。

在第二種情況下,我更喜歡使用接口而不是抽象類,因為在這種方法中繼承不會帶來任何好處。

暫無
暫無

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

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