0

Java - 抽象基本クラスがあり、サブクラスから基本クラスのいくつかのプロパティを設定したいと考えています。それを行う最良の方法は何ですか?プロパティを保護しますか? 基本クラスでセッターを作成しますか?

public abstract class A {
protected String tag;
protected String apiUrl;
    // Setter
    public void setApiUri(String url) {
        this.apiUrl = url;
    }
}

public class B extends A {
    tag = "Class B";
    apiUrl = "Class B Prefs";
}

public class C extends A {
    tag = "Class C";
    apiUrl = "Class C Prefs";
}

最善のアプローチ/より良い方法を教えてください。

4

2 に答える 2

3

最大限のカプセル化が必要な場合は、基本クラスのフィールドを非公開にし、保護されたアクセサーを提供します。通常、これがベスト プラクティスです。

最大のカプセル化についてあまり気にしない場合は、フィールドを保護することができますが、継承が本質的に行うよりもさらに緊密にクラスを結合します。

一般に、最善の策は上記の最初のオプションです。JVM の JIT は呼び出しを最適化することができ、クラスをある程度疎結合に保つのに役立ちます。

于 2012-07-25T18:38:21.733 に答える
0

状況にもよりますが、通常は、派生クラスから基本クラスの状態を保持し、独自のメンバーをインスタンス化する方法を完全に制御したいと考えています。これを実現する最善の方法は、メンバーを入力して初期化し、具象クラス内から呼び出す基本クラスのコンストラクターを指定することです。次に例を示します。

abstract class Base{
    String s;
    int i;

    public Base(String s, int i){
        this.s = s; // Only base knows best how the initialization should be done
        this.i = i;
    }
}

class Concrete extends Base{

    // the role of the inheritor is to pass on the building blocks of its Base to Bases
    //constructor
    public Concrete(String s, int i) {
        super(s, i);
    }

}
于 2012-07-25T18:44:26.580 に答える