作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭。这个问题需要更多 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 和 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 。
Dog d = new Labrador();
Labrador lbd = (Labrador) d;
关于JAVA类层次结构: Which of the following lines will not compile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38027555/
我是一名优秀的程序员,十分优秀!