-2
Object a=new Object();
Orange o=(Orange)a;


Orange orange=new Orange();

o 和orange 都以不同的方式实现。他们的行为是否相同?(可以调用Orange类的所有实例方法和字段)

4

4 回答 4

8

No.a不是 Orange,它是 Object 类型;并且不能向下转换为橙色(运行时错误),因为它不是。

orange是橙子。它可以被赋值(没有强制转换)或类型 Object,然后可以被强制转换回 Orange;因为实际引用(在运行时)Orange 的一个实例。

Java 实例类型是在创建时设置的,即调用构造函数时。永远不可能将对象的实际类型更改为其他类型。

于 2013-05-16T10:35:54.757 回答
2

首先,以下行将生成一个ClassCastException

Orange o=(Orange)a;

o 和orange 都以不同的方式实现。他们的行为是否相同?(可以调用Orange类的所有实例方法和字段)

答案:不。因为orange是 的对象Orange,而aObject

于 2013-05-16T10:39:24.970 回答
1

你会得到一个ClassCastExceptionhere Orange o=(Orange)a;你不能向下Object投到Orange

你能行的

Object a=new Orange();
Orange o=(Orange)a;
于 2013-05-16T10:40:45.700 回答
1

您是否尝试过运行此代码?它会抛出 ClassCastException

于 2013-05-16T10:46:49.137 回答