-1

私は型キャストに関する短い調査を行っていました。以下は私のコードです

interface Foo {}
class Alpha implements Foo {}
class Beta extends Alpha {}

public class Delta extends Beta
{
    public static void main( String[] args )
 {      
        Beta x = new Beta();         
         Alpha a = x;
            // Foo f = (Alpha)x;// --> commented out
         Beta b = (Beta)(Alpha)x;   
         Foo f = (Delta)x; //  --> complie time error   

    }

}

最後のステートメントで示されているように、実行時エラー java.lang.ClassCas tException がスローされます。アドバイスしてください。Alpha でキャストすると、完全に正常に動作します。

4

2 に答える 2

4

実際のオブジェクトよりもクラス階層の深い型に変数をダウンキャストすることはできません。これは、ダウンキャストされた変数にいくつかの属性を追加する必要があり、それらの値がどうあるべきかが明確でないためです。

ただし、キャストに関するすべてのチェックでは、実際に重要なのは、現在宣言されている型ではなく、参照されるオブジェクトの実際の型です。たとえば、 があっても、実際のインスタンスが のオブジェクトを指しているためAlpha a = x;、これは にダウンキャスト可能です。BetaBeta

于 2012-05-01T05:41:47.920 に答える
1

BetaにダウンキャストすることはできませんDelta

あなたがしていることは、(ベータ)オブジェクトをインスタンス化し、それを(ベータ)のサブクラス、たとえば(デルタ)Animalにダウンキャストすることに似ています。これは違法です。AnimalDog

于 2012-05-01T05:41:32.963 に答える