良い日、私は次の問題を抱えています:クラスBはクラスAを拡張し、両方のメソッドはクラスBをインスタンス化した後、別のクラスの別のメソッドによって呼び出されます(例は次のとおりです)。
public class A{
//fields
//constructors
//methods
}
public class B extends A{
//fields
//constructors
//methods
}
public class CALLER{
public A getA(enum E){
return Factory.getB(otherobject,E);
}
}
public class Factory{
public static B getB(object o,enum e){
//do something with enums and get B
b = new B();
//populate b
return b;
}
}
クラスBはクラスAのメソッドをオーバーライドしません。コンパイル時にエラーは発生しませんが、実行時にクラスCALLERを除きます。java.lang.NoSuchMethodError:Factory.getB(object、enum)A
私の質問は、BがAを拡張する場合、return句がBオブジェクトを直接返しても、別のクラスのメソッドがAを返すことができないのはなぜですか?実際に変化する:
public static B getB(object, enum);
と
public static A getB(object, enum);
例外を解決しますが、コードの他の部分では明らかにAではなくBタイプのオブジェクトを待機しているため、別の例外(classCast)が発生します。
前もって感謝します。