次のクラスがあります。
public abstract class A implements C {
...
}
public abstract class B extends A {
method();
}
しかし、次のことをしようとすると
A a = null;
A a = new A();
((B) a).method();
ClassCastException を受け取りました。解決策はありますか?
BはAを拡張しますが、AはBを拡張しません。
Aが持っているものはすべてBが持っているが、AはBで宣言されていることを行うことができない
のインスタンスB
はのインスタンスですがA
、のインスタンスA
は必ずしも。ではありませんB
。「すべての円は形ですが、すべての形が円であるとは限りません」と言うのと似ています。
あなたがやろうとしていることをすることはできません。そのため、例外が発生します。
ここで必要なのは、コンストラクターと A オブジェクトを使用して、メソッドが含まれている (A には含まれていない) より大きな B オブジェクトを作成することだと思います。しかし、それはあまり意味がありません。なぜあなたが実際にこれをやりたいのか、そして最初から B オブジェクトを構築するだけではないのか、私の人生では考えられません。
public abstract class A implements C {
...
}
public abstract class B extends A {
public B(A child){
//Construct a B out of A here
}
public void method();
}
それで
A a = null;
A a = new A();
new B(a).method();