Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在这段java代码中,实例化是如何发生的?_Java - Fatal编程技术网

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

在这段java代码中,实例化是如何发生的?,java,Java,我的代码是:- 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;

我的代码是:-

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新手。因此,请任何人解释一下这里是如何执行实例化的,比如如何为每个对象提供访问权限


代码中也有一个错误,请帮我更正。

您不能将
建筑
转换为
字符串类型。这两个类(继承、接口等)之间没有关系

当然,
建筑
是一个
对象
,但是如果将其强制转换为
对象
,则会丢失有关
建筑
对象的信息


实例化变量是从右向左关联的;创建每个对象的新实例,并将其指定给变量。如果您正在执行强制转换,那么重要的是确保您要强制转换的类型与您获得的类型相关(即,将
对象
强制转换为
整数
——这可能有效,也可能无效,这取决于您得到的内容是否可以合理地强制转换为
整数
)。

鉴于此
Barn bar2=(Barn)建筑1

相等((Barn)build1)后面的部分表示您正在将build1键入Building类型Barn,并将其值传递给bar2

您可以这样做,因为任何谷仓都是一个建筑,正如您在类定义中扩展的那样(谷仓扩展了建筑)。您还可以将任何类类型转换为对象类,因为在Java中,所有类都是从对象扩展而来的,也就是说,一切都是对象

当您尝试将其转换为字符串时,会出现该错误,因为建筑与字符串类没有连接。明白了吗

  Building b = (Building) (new Barn());
将可以访问建筑的所有成员和场地,而不考虑添加的谷仓场地(称为向下投射)

在访问特定于barn的成员时将导致空指针,或使其未初始化。。。我有点忘记了当你向上抛投时会发生什么,因为除非你期待着一只猫,否则把动物抛给猫是没有意义的;)


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

我希望“Barn extends Buildings”是打字错误,应该是Barn extends BuildinString和Buildings没有任何关联(没有继承),因此您将在字符串str1=(String)build1;行出现编译时错误;。所有其他行都会编译,因为它们是相关的。更有趣的是,学习如何使用Eclipse,以及如何逐步使用调试器,请按照作业进行操作。但是请告诉我上面声明的每个对象中的权限是如何变化的……例如,哪个对象可以访问类的所有成员(如果已定义)…我希望你明白我的问题?但是请告诉我上面声明的每个对象中的特权是如何变化的…比如哪个对象可以访问类的所有成员(如果定义的话)…我希望你明白我的问题?你首先只能使用
new
操作符实例化。在代码中这样做了两次,其他情况是在转换值类型时赋值。这个主题(类型转换)应该在您理解Java的核心原则之后学习。您应该首先了解面向对象编程的基础知识。我可以推荐你先读Java——几天后你的知识会有很大的飞跃
将生成一个
ClassCastException
,因为实际上无法将
建筑
强制转换为
谷仓
(毕竟并非所有建筑都是谷仓)。
  Barn b = (Barn) (new Building());