我的代码是:
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新手。所以请任何人解释一下实例化是如何在这里执行的,比如如何为每个对象提供访问权限。
还有一个错误,在代码中,请帮助我纠正它也。
发布于 2012-08-09 22:49:46
您不能将Building转换为String类型。这两个类(继承、接口等)之间没有关系。
当然,Building也是Object,但是将Building对象强制转换为Object会丢失有关该对象的信息。
实例化一个变量是从右向左关联的;您创建每个对象的一个新实例,并将其分配给一个变量。如果你正在进行类型转换,那么重要的是要确保你要转换的类型与你得到的类型相关(例如,将Object转换为Integer -这可能会也可能不会起作用,这取决于你得到的结果是否可以合理地转换为Integer)。
发布于 2012-08-09 23:05:36
Building b = (Building) (new Barn());将有权访问建筑的所有成员和字段,忽略添加的Barn字段(这称为向下转换);
Barn b = (Barn) (new Building());在访问谷仓特定的成员时将导致空指针,或者将使它们未初始化...我有点忘记了当你升级时会发生什么,因为除非你想要一只猫,否则把一只动物扔给一只猫是没有意义的;)
如果没有特定的方法或调试器,您将无法注意到其中的差异。我在你的代码中看不到用例,只看到了类型转换。
https://stackoverflow.com/questions/11885994
复制相似问题