lui*_*7up 3 java inheritance casting class object
想象一下,一个类别的Cottage扩建了建筑和代码
Building building = new Building();
Cottage cottage = (Cottage)building;
Run Code Online (Sandbox Code Playgroud)
现在,考虑到java继承的本质,完全有意义的是不能将Building转换为Cottage,但对我来说没有意义的是这个编译.为什么要编译然后抛出运行时ClassCastException?
在实际运行程序之前,构建是否是对Building对象的引用是不是很明显?
作为一个普遍的问题,我知道我得到了一个可能重复的这个:)但我找不到答案为什么它的编译问题:)
EDIT2我在这里接受了一个很好的答案(更不用说下面的讨论了:)),但我仍然在Java中找到了接受的答案,导致运行时错误而不是编译错误最有趣......
编辑我编辑了IllegalCastException并输入了正确的ClassCastException
Roh*_*ain 10
那是因为编译器不知道你的引用Building指的是什么对象.
因此,在下面的例子中,你有一个基类引用,指向子类对象: -
Building building = new Cottage();
Cottage cottage = (Cottage)building;
Run Code Online (Sandbox Code Playgroud)
它会完美无缺.因此,它完全是一个运行时决定,关于它是否是有效的强制转换.因此,编译器不会为此抛出错误.
在实际运行程序之前,构建是否是对Building对象的引用是不是很明显?
不,绝对不是.被引用的对象类型直到运行时才知道.永远记住,编译器总是检查引用类型.在运行时检查实际对象类型.
这个概念称为多态,在这里您可以使用相同的引用类型来指向各种子类型的对象.你可以谷歌它,并将获得大量的资源来阅读.
| 归档时间: |
|
| 查看次数: |
5313 次 |
| 最近记录: |