0

buildFoo メソッドが Foo を取り込んで何かをビルドするクラス BasicFooBuilder があります。しかし、ビルダーの階層全体と、操作したいより複雑なオブジェクトを作成したいと考えています。現在、私は次のようなものを持っています:

public interface Builder{
 public void buildFoo(BasicFoo foo);
}

public class BasicFooBuilder implements Builder{
 @override
 public void buildFoo(BasicFoo foo){
  //Do something
 }
}

public class FancyFooBuilder extends BasicFooBuilder{
 @override
 public void buildFoo(BasicFoo foo){
  ((FancyFoo)foo).doSomethingFancy();
 }
 //More stuff inherited from basic foo
}

public class FancierFooBuilder extends FancyFooBuilder{
 @override
 public void buildFoo(BasicFoo foo){
  ((FancierFoo)foo).doSomethingFancier();
 }
 //More stuff inherited from basic foo and fancy foo
}

クラス階層は次のようなものです。

BasicFoo
  |
  FancyFoo
    |
    FancierFoo

だから質問はこれです:

サブクラスのオーバーライドされたメソッドですべてのキャストを行わずに上記を行うにはどうすればよいですか?

4

1 に答える 1