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
}
あなたが参照することができます この 答えを得るための質問。