0

から継承するクラスbrotherClassとクラスがあります。と呼ばれるメソッドは で定義されています。現在、両方の子クラスがいくつかの関数のロジックを呼び出しています。sisterClassparentClassgetName()parentClassgetName()

現在、クライアントは、brotherClasssisterClassを呼び出す両方の外部に単一のクラス (?) が存在するようにすることを望んでいますgetName()。こうすることで、両方の子クラスが、それぞれのクラスで 2 回ではなく、その外部関数を 1 回呼び出すことができます。

ある意味で、彼はスペース/メモリを節約したかったと思います。getName()それ以外の場合、彼は、 で何らかの方法で呼び出す関数を実装する必要がbrotherClass()あり、それsisterClassもそれにアクセスできるはずだと述べました。

私はこれをどのように進めるかについてかなり途方に暮れており、これを逐語的に入力しました。これは、私が現在職場で直面している問題の非常に単純化されたバージョンです。

4

2 に答える 2

0

すべてのサブクラスに同じコードがある場合は、その共通コードをスーパー クラス メソッドに入れることができます。

public class HelloWorld {
}

public class Child1 extends HelloWorld {
     public void someLogic() {
          [commonCode]
          ...
     }
}

public class Child2 extends HelloWorld {    
     public void someOtherMethod() {
          [commonCode]
          ...
     }
}

:

public class HelloWorld {
     public void common() {
          [commonCode]
     }
}

public class Child1 extends HelloWorld {
     public void someLogic() {
          super.common();
          ...
     }
}

public class Child2 extends HelloWorld {    
     public void someOtherMethod() {
          super.common();
          ...
     }
}
于 2012-09-18T20:21:50.617 に答える
0

できることは、実装するロジックによって異なります。結果を含むフィールドを親クラスに追加し、getName()兄弟または姉妹メソッドを実行するときに、そのフィールドに何かが含まれているかどうかを確認するだけです。ある場合はそこからの値を使用し、そうでない場合は完全なgetName()ロジックを実行します。

合わない場合は、次のような別のクラスを作成する方法もあります。

class Container{
    Brother b;
    Sister s;
    void doCalculations(){
        Object result = Parent.getName();
        b.runMethod(result);
        s.runMenthod(result);
}

他のオプションもあるかもしれません。

于 2012-09-19T06:39:02.620 に答える