首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在这段java代码中,实例化是如何发生的?

在这段java代码中,实例化是如何发生的?
EN

Stack Overflow用户
提问于 2012-08-09 22:46:09
回答 2查看 142关注 0票数 1

我的代码是:

代码语言:javascript
复制
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新手。所以请任何人解释一下实例化是如何在这里执行的,比如如何为每个对象提供访问权限。

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

EN

回答 2

Stack Overflow用户

发布于 2012-08-09 22:49:46

您不能将Building转换为String类型。这两个类(继承、接口等)之间没有关系。

当然,Building也是Object,但是将Building对象强制转换为Object会丢失有关该对象的信息。

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

票数 1
EN

Stack Overflow用户

发布于 2012-08-09 23:05:36

代码语言:javascript
复制
  Building b = (Building) (new Barn());

将有权访问建筑的所有成员和字段,忽略添加的Barn字段(这称为向下转换);

代码语言:javascript
复制
  Barn b = (Barn) (new Building());

在访问谷仓特定的成员时将导致空指针,或者将使它们未初始化...我有点忘记了当你升级时会发生什么,因为除非你想要一只猫,否则把一只动物扔给一只猫是没有意义的;)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11885994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档