Java 中的多态性和铸造对象
Polymorphism and casting object in Java
是否有可能将 o1 或 o2 转换为 A 并且程序会 运行?为什么最后一条语句是运行时间错误?
public class A{
public A(Object object)
{
}
public A(){
}
public String toString(){
return "A";
}
}
public class Main{
public static void main(String []args){
A a4 = new A();
Object o1 = new Object();
Object o2 = new A(o1);
a4 = o1; //Compilation error
o2 = o1;
((A)o1).toString();//Runtime error
a4.toString();
((A)o2).toString();//Runtime error
}
}
是否有可能将 o1 或 o2 转换为 A ?
这取决于您何时尝试进行转换。
A a4 = new A();
Object o1 = new Object();
Object o2 = new A(o1);
// o2 CAN be cast to A here
o2 = o1;
// o2 now CANNOT be cast to A here, since it is now referencing an object of type Object, not of type A
最后一条语句是错误的,因为强制转换:
(A)o2
是一个运行时错误,因为此时 o2 引用的是对象,而不是 A。
请注意,这不可能是编译错误,因为该语言的语法意味着 Object 类型的变量可能引用 A 类型的对象(因此转换可能有效)
是否有可能将 o1 或 o2 转换为 A 并且程序会 运行?为什么最后一条语句是运行时间错误?
public class A{
public A(Object object)
{
}
public A(){
}
public String toString(){
return "A";
}
}
public class Main{
public static void main(String []args){
A a4 = new A();
Object o1 = new Object();
Object o2 = new A(o1);
a4 = o1; //Compilation error
o2 = o1;
((A)o1).toString();//Runtime error
a4.toString();
((A)o2).toString();//Runtime error
}
}
是否有可能将 o1 或 o2 转换为 A ? 这取决于您何时尝试进行转换。
A a4 = new A();
Object o1 = new Object();
Object o2 = new A(o1);
// o2 CAN be cast to A here
o2 = o1;
// o2 now CANNOT be cast to A here, since it is now referencing an object of type Object, not of type A
最后一条语句是错误的,因为强制转换:
(A)o2
是一个运行时错误,因为此时 o2 引用的是对象,而不是 A。
请注意,这不可能是编译错误,因为该语言的语法意味着 Object 类型的变量可能引用 A 类型的对象(因此转换可能有效)