1

abstract class Foobar
{

  abstract void myAbstractMethod();

  public void myConcreteMethod()
  {
      //busy code begin
      myAbstractMethod();
      // busy code complete
  }

class childClass extends FooBar
{

  @Override
  public myAbstractMethod()
  {
   //busy code to make abstract method, concrete
  }

}

これは受け入れられますか?これは正しいアプローチですか?これは貧弱なデザインですか?

4

10 に答える 10

6

完全に許容できます。たとえば、テンプレートメソッドデザインパターンを他の方法で使用することはできません。

于 2012-10-19T13:02:06.857 に答える
2

はい、抽象クラスを正しく使用しています。

于 2012-10-19T12:59:54.717 に答える
1

はい、これは理にかなっており、許容できます。

于 2012-10-19T13:00:18.397 に答える
1

抽象クラスが独自のメソッドを呼び出すことは、合法であり、有用です。

これは、サブクラスが抽象クラスの動作を拡張するための1つの方法です。

于 2012-10-19T13:01:26.933 に答える
1

使用する必要があるので使用しています-抽象化の全体的なポイントは、クラスがメソッドがそこにあることを知っているということです:)

于 2012-10-19T13:01:54.713 に答える
1

確かに、これは抽象メソッドの主な利点の1つです。抽象クラスではより大きなプロセスが提供されますが、その一部はサブクラスに委ねられています。抽象メソッドを呼び出して、サブクラスがその寄与を入力できるようにします。

于 2012-10-19T13:02:29.663 に答える
1

はい。これは非常に真実です。これは、抽象メソッドの実装の責任をコンシューマーに委任していること、またはクライアントと言ってもメソッドを使用していることを示します。

イベントリスナーは、実装がわからないが、クライアントが独自の方法でイベントを処理すると想定してメソッドを呼び出す場合にのみ、この方法で実装されます。

于 2012-10-19T13:03:16.117 に答える
1

はい。これがテンプレートメソッドデザインパターンの仕組みであり、アルゴリズムの特定のステップをサブクラスでオーバーライドして、さまざまなサブクラスでさまざまな動作を可能にします。

于 2012-10-19T13:10:58.850 に答える
0

はい。

たとえば、メソッドで最初にいくつかの一般的な作業を実行してから、サブタイプ(サブクラス)固有の作業を続行する必要があります。

abstract class xxx{
public void work(){
  common1();
  common2();
  specific();
}

abstract void specific();

}
于 2012-10-19T13:04:06.893 に答える
0

これは可能であり、これは良いアプローチだと思います。たとえば、抽象クラスStoneには、独自の抽象メソッドcomputeVolume()を呼び出すgetMass()メソッドが実装されている場合があります。ComputeVolume()は、立方体と丸い石では異なります。

于 2012-10-19T13:09:36.603 に答える