0

私はオブジェクト指向のデザインが得意ではないので、ご容赦ください..

私はクラスAを持っています.そして、Aを拡張する2つのクラスがあります.しかし、それらは両方とも同じフィールドを持っています..だから、Aにゲッター/セッターを持つか、両方の子クラスに同じゲッター/セッターを持つ方が良い..またはこれを行うためのより良い方法..?

これは私がやったことです(モック)..

 class A{

    private int x;

    protected A(int x){
    this.x = x;
    }

    public static A createA(id a, int x){
    switch(a){
    case 0: 
    return new C(x);
    break;
    //so on

    }


    public int getX(){
    return x;
   }

    }

ありがとう..

4

2 に答える 2

2

これはクラスによって異なります

それらのプロパティが A のプロパティである場合ははい、同じプロパティを持つ可能性がある場合はいいえ。

基本的に、自問する必要がある質問は、これらのプロパティを必要としない A を拡張するクラスが存在するかどうかです。

答えが「いいえ」の場合、それらを A に置きます。

答えが「はい」の場合は、それらをサブクラスに保持するか、これら 2 つのサブクラスの間に別の抽象クラスを作成して、これら 2 つのプロパティを持ちます。

于 2013-02-19T13:53:31.647 に答える
1

あなたのクラスがA(親)とBC子供)であるとしましょう。あなたはそう言ってBC同じフィールドがいくつかあります。

自問してみてください:Dの子クラスである別のクラスがある場合A、その特定の機能に関係なく、それらのフィールドもあるでしょうか?

  • 答えが「はい」の場合、両方のサブクラスにこれらのフィールドが存在することは間違いなく偶然ではないため、おそらく で定義する必要があります。これはA、 から継承するという理由だけでこれらのメンバーを持つことを意味するためAです。

  • 答えが「いいえ」の場合、サブクラスにこれらのフィールドが存在するのは偶然かもしれませんし、そうでないかもしれません。したがって、自問する必要があります:Dにこれらのフィールドがなくても、 と の両方に存在することBC単なる偶然ではありませんか? これらのクラスはD、 の別の子であるAが単に共有していないものを共有していますか?

    • はいの場合は、これらの共通メンバーを定義Eして を拡張Aし、の代わりに のmakeと子を作成する新しいクラスを検討してください。EBCEA

    • そうでない場合 (単なる偶然のように見える場合) は、構造をそのままにしておいてください。または、代わりにインターフェースを検討してください。

于 2013-02-19T13:54:23.973 に答える