两个实例的实例化方式是否相同?

时间:2013-05-16 10:34:06

标签: java

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


Orange orange=new Orange();

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

4 个答案:

答案 0 :(得分:8)

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

orange是橙色。它可以被赋值(没有强制转换)或者输入Object,然后可以将它转换回Orange;因为实际引用(在运行时)橙色的实例。

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

答案 1 :(得分:2)

首先,以下行将生成ClassCastException

Orange o=(Orange)a;
  

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

答案:不会。因为,orangeOrange的对象,而aObject

答案 2 :(得分:1)

您将在此处获得ClassCastException Orange o=(Orange)a;您无法将Object向下投射到Orange

你可以做到

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

答案 3 :(得分:1)

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