/ Javaの/ Downcastingオブジェクト - java、downcasting

Javaのダウンキャストオブジェクト - java、ダウンキャスト

class A{

}

public class Demo
{
public static void   main(String s[])
{
Object o=(Object) new Demo();
if (((A)(o)) instanceof Object)
{
System.out.println("true");
}
}
}

Demo.javaクラスを実行中にExceptionが発生します。

java.lang.ClassCastException: Demo cannot be cast to A

ダウンキャストする方法 o への参照 class A

回答:

回答№1は1

最初から始めましょう:これはひどいコードです。 言われていること:

  • あなたはデモをObjectにキャストしています(JavaではすべてがObjectなので、何らかの理由でキャストする必要はありません)。
  • あなたはそれからoをキャストしています、 あなたはそれがDemo型であることを知っていることAに(なぜこれでうまくいくのでしょうか?)
  • Object oがObject型かどうかを調べています(なぜこれは失敗するのでしょうか?)

いくつかのメモ:

  • oあなたはそれを宣言したように、参照として見られるべきではなく、それはObjectのインスタンスです。 Cで物事がどのように機能したか忘れてください
  • インターフェースを検討し、AをDemoが実装するインターフェースにしたい場合。
  • インスタンスをキャストできるのは、それらがすでに拡張しているクラスに限られます。

ダウンキャストの例:

    public class A {
int variable = 0;
}

public class Demo extends A{

}

public void testDowncast(){
Demo myClass = new Demo();
myClass.variable = 2;
A morphingTime = myClass;
System.out.println("And now Power Ranger Demo has turned into Mighty A:");
System.out.println("I am: "+morphingTime.getClass() + " and my variable is: " + morphingTime.variable);
}

回答№2については4

それができるのはそれだけです。 Demo 拡張する Aそれ以外の場合は、クラスオブジェクトを他の型にキャストすることはできません。

public class Demo extends A {

回答№3の場合は1

答えは R J は正しい

それができるのはそれだけです。 Demo 拡張する A

あなたの情報のために、あなたはに割り当てている間、オブジェクトを型キャストする必要はありません。 Object

Object o= new Demo();

そしてすべてのオブジェクトは常に instanceof オブジェクトすなわちあなたの状態 instanceof Object クラスオブジェクトの場合は常に true

そして、なぜあなたはこのようなことをやろうとしているのですか、 ((A)(o)) 型をチェックせずに instanceof そうではなく、

if (o instanceof A)

回答№4の場合は1

まず第一に、あなたは "ClassCastException"を取得している実際のオブジェクト "o"はクラス "Demo"であり、クラス "Demo"と "A"は同じ継承ツリーにはないためです。オブジェクトをクラス "Object"にキャストしただけではコンパイルエラーにはなりませんでした( "A"と "Object"は同じ継承ツリーにあるため)。それらは同じ継承ツリーの一部になります( "Demo"と "A")。たとえば、AからDemoを拡張できます。次に、このようにキャストせずにオブジェクト「o」を確認します。

    if (o instanceof A) {
// now cast to "A"
// and invoke any accessible method (or etc.) that class A provides
((A)o).doSomthingMathod();
}

回答№5の場合は0

あなたは単にあなたのコードを以下のように書き直すべきです。

Object o=new Demo();
if (o instanceof A)
{
System.out.println("true");
}

そして、次に何が変わるのかを見てください。 Demo extends A


答え№6の場合は0

ObjectはすべてのJavaクラスのスーパークラスなので、キャストせずにデモインスタンスをオブジェクトにキャストする必要はありません。したがって、Demo参照をObjectクラスに割り当てることができます。

public class Demo extends com.A {

}

回答№7は0

ダウンキャストとは、基本クラスの参照をその派生クラスの1つにキャストすることです。

例えば ​​:

public class Parent{}
public class Child extends Parent{}

public static void main(String args[]){
Parent parent = new Child();              // Parent is parent class of Child, parent variable holding value of type Child
Child child = (Child)parent;              // This is possible since parent object is currently holding value of Child class
}

あなたが参照することができます この 答えを得るための質問。