-3

次のクラスがあります。

public abstract class A implements C {
    ...
}

public abstract class B extends A {
    method();
}

しかし、次のことをしようとすると

A a = null;
A a = new A();
((B) a).method();

ClassCastException を受け取りました。解決策はありますか?

4

3 に答える 3

3

BはAを拡張しますが、AはBを拡張しません。

Aが持っているものはすべてBが持っているが、AはBで宣言されていることを行うことができない

于 2012-11-28T14:24:33.730 に答える
0

のインスタンスBはのインスタンスですがA、のインスタンスAは必ずしも。ではありませんB。「すべての円は形ですが、すべての形が円であるとは限りません」と言うのと似ています。

あなたがやろうとしていることをすることはできません。そのため、例外が発生します。

于 2012-11-28T14:24:45.580 に答える
0

ここで必要なのは、コンストラクターと 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();
于 2012-11-28T14:27:06.357 に答える