在这段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());