gpt4 book ai didi

JAVA类层次结构: Which of the following lines will not compile?

转载 作者:行者123 更新时间:2023-12-02 11:15:22 25 4
gpt4 key购买 nike

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

5年前关闭。




Improve this question




具有以下类层次结构:

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

我认为第 5 行:因为 Poodle 和狗的静态绑定(bind)。

第 8 行:只有静态绑定(bind)与分配相关。

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

最佳答案

你是对的,陈述 5 和 8 将失败。

5> 您不能将父类的对象分配给子类的 ref 变量。 Poodle 绝对是狗。但是狗可能不是 Poodle 。

8> 第 8 行也是如此。但是,这没关系:dog2= (Dog)labrador;
注意:在第 8 行进行的显式类型转换是可以的,因为拉布拉多是拉布拉多的对象,拉布拉多又是 Dog 的子类。如果你尝试在 (5) 的情况下做同样的事情,比如

poodle = (Poodle)dog;

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

此外,第 2 行完成的显式类型转换不是很有用,因为它是隐式完成的。以下是需要显式类型案例的地方:
Dog d = new Labrador();
Labrador lbd = (Labrador) d;

关于JAVA类层次结构: Which of the following lines will not compile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38027555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com