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类时遇到异常:
java.lang.ClassCastException: Demo cannot be cast to A
如何低估o
对class A
的引用?
答案 0 :(得分:4)
只有当Demo
扩展A
时才能这样做,否则,您根本无法将类对象强制转换为任何其他类型。
public class Demo extends A {
答案 1 :(得分:1)
让我们从头开始:这是可怕的代码。 话虽如此:
一些注意事项:
Downcast示例:
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 :(得分:1)
R J的回答是正确的
只有在
时才能这样做Demo
扩展A
为了您的信息,您在分配到Object
Object o= new Demo();
并且每个对象始终为instanceof
对象,即类对象的条件instanceof Object
始终为true
你为什么要这样做,((A)(o))
而没有用instanceof
检查类型,而应该是,
if (o instanceof A)
答案 3 :(得分: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();
}
答案 4 :(得分:0)
首先,您不需要将Demo实例转换为对象而不进行转换,您可以将Demo引用分配给Object类,因为Object是所有java类的超类。
public class Demo extends com.A {
}
答案 5 :(得分:0)
您只需将代码重写为
即可Object o=new Demo();
if (o instanceof A)
{
System.out.println("true");
}
然后看看Demo extends A
答案 6 :(得分:0)
向下转换是将基类的引用转换为其派生类之一的行为。
例如:
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
}
您可以参考this问题来获得答案。