1

我的代码是:-

class Building{}

class Barn extends Building{
    public static void main(String[]args){
        Building build1 = new Building();
        Barn bar1 = new Barn();
        Barn bar2 = (Barn)build1;
        Object obj1 = (Object)build1;
        String str1 = (String)build1;    //also an error over here
        Building build2 = (Building)bar1;
    }
}

我是 Java 新手。所以请任何人都可以解释一下这里是如何进行实例化的,比如如何访问每个对象。

代码中也有错误,请帮助我纠正它。

4

3 回答 3

1

您不能转换BuildingString. 两个类(继承、接口等)之间没有关系。

肯定 aBuilding是a 的情况,但是通过将对象强制转换为Object,您会丢失有关对象的信息。BuildingObject

实例化一个变量是从右到左关联的;您为每个对象创建一个新实例,并将其分配给一个变量。如果你正在做一个演员,那么重要的是要确保你要转换的类型与你得到的类型相关(即转换ObjectInteger- 这可能会或可能不会起作用,这取决于你是否返回可以合理地转换为Integer)。

于 2012-08-09T14:49:46.083 回答
1

鉴于这种Barn bar2 = (Barn)build1;

等于((Barn)build1)之后的部分意味着您正在将build1 Building类型转换Barn类型并将其值传递给 bar2。

您可以这样做,因为任何 Barn都是建筑物,正如您在类定义(Barn extends Building)中扩展的那样。您还可以将任何类类型强制转换为 Object 类,因为在 Java 中,所有类都从 Object 扩展而来,也就是一切都是 Object。

尝试将其转换为 String 时遇到该错误,因为 Building 与 String 类没有连接。知道了?

于 2012-08-09T14:57:20.430 回答
0
  Building b = (Building) (new Barn());

将可以访问 Building 的所有成员和字段,而忽略添加的 Barn 字段(称为向下转换);

  Barn b = (Barn) (new Building());

访问特定于谷仓的成员时会导致空指针或使它们未初始化......我有点忘记了当你向上转换时会发生什么,因为除非你期待一个 Cat ,否则将 Animal 转换为 Cat 没有什么意义; )

如果没有特定的方法或调试器,您将无法注意到差异。我在您的代码中没有看到用例,只有强制转换。

于 2012-08-09T15:05:36.330 回答