私のコードはこれに似ています:
class Base{
public void handleObject(A a){
//more code...
System.out.println("A");
}
}
class Sub extends Base{
public void handleObject(B b){
//more code specific to this instance and class B
System.out.println("B");
}
public void handleObject(C c){
//more code specific to this instance and class C
System.out.println("C");
}
}
B と C は A から継承します。
次に、このコードから Base の handleObject を呼び出します。
//...
Sub s = new Sub();
A[] obj = {new B(), new B(),new C(), new A()};
for(A o:obj){
s.handleObject(o);
}
//...
そして、タイプ B の各オブジェクトに対して Sub.handleObject(B b) が呼び出され、タイプ C に対して Sub.handleObject(C c) が呼び出され、タイプ A のオブジェクトに対して Base.handleObject(A a) が呼び出されることを期待しています。
実際の結果は、「A」を 3 回出力することです。
Java のオーバーロード機能を使用して動作させることは可能ですか、それともすべてのオブジェクトを自分で型チェックする必要がありますか? そうでない場合、望ましい動作を実現するためのベスト プラクティスは何ですか?
この質問は私のものと非常に似ていますが、答えは彼の試みがうまくいかず、私にとって十分な解決策を提供しなかった理由を示しているだけです.
Visitor Patternを使用して動作させることも試みましたが、その例では、 Base クラス (または少なくともインターフェイス) が Sub について知る必要があるようです。