Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/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_Compiler Errors_Hierarchy - Fatal编程技术网

JAVA类层次结构:以下哪一行不会编译?

JAVA类层次结构:以下哪一行不会编译?,java,compiler-errors,hierarchy,Java,Compiler Errors,Hierarchy,具有以下类层次结构: Interface Animal {…} class Dog implements Animal{…} class Poodle extends Dog {…} class Labrador extends Dog {…} 以下哪一行不会编译 Poodle poodle = new Poodle(); //1 Animal animal = (Animal) poodle; //2 Dog dog = new Labrador(); //3 animal = dog; /

具有以下类层次结构:

Interface Animal {…}
class Dog implements Animal{…}
class Poodle extends Dog {…}
class Labrador extends Dog {…}
以下哪一行不会编译

Poodle poodle = new Poodle(); //1
Animal animal = (Animal) poodle; //2
Dog dog = new Labrador(); //3
animal = dog; //4
poodle = dog; //5
Animal labrador = new Labrador(); //6
Dog dog2 = new Labrador(); //7
dog 2=labrador;//8
我认为第五行:因为卷毛狗和狗的静电束缚

第8行:只有静态绑定与赋值相关


我说得对吗?你能解释一下吗

你说得对,语句5和8将失败

5> 不能将父类“对象”分配给子类“ref变量”。狮子狗绝对是狗。但是狗可能不是狮子狗

8> 第8行也是如此。不过,这没关系:
dog2=(狗)拉布拉多

注意:在第8行进行显式的类型转换是可以的,因为拉布拉多是拉布拉多的对象,拉布拉多又是狗的一个子类。如果你在(5)的情况下也这么做,比如

它会编译,但在运行时会失败——原因很简单——
dog
指的是拉布拉多犬
dog.getClass()
将返回
Labrador.class
。对于任何ref引用的对象,ref应该是属于对象原始类的向上层次结构的类/接口的ref。拉布拉多犬虽然是狗,但绝对不是贵宾犬

另外,第2行的显式类型转换也不是很有用,因为它是隐式完成的。以下是需要显式typecase的地方:

Dog d = new Labrador();
Labrador lbd = (Labrador) d;

讲师问你这个问题的目的是让你根据研究结果来回答。让别人替你回答不是研究。即使你发布了你自己的部分答案。这是为了测试评论。添加到TJ的评论中,你也可以尝试编译代码,然后查看失败的地方和出现的错误。你是对的,它是5。我不确定这里是否有一个有意义的答案,所以你可能想删除这个问题。毕竟,您的讲师可能对堆栈溢出并不陌生:-)我还说了第8行:这也对吗?为什么第5行没有强制转换会有帮助?添加了一些编辑。这应该对你有帮助。为什么有人会否决我的答案P如果你这样做的话,至少要谦虚地加上一条评论。谢谢!“ref”代表什么?引用变量。您可以使用类本身或父类的引用变量引用类的对象。如果您是java程序员,它们绝对是必须的。有关静态和动态绑定的概念将在后面介绍。
Dog d = new Labrador();
Labrador lbd = (Labrador) d;