日期:2011-03-22 16:17:00 来源:本站整理
java下溯造型与运行期典范标识[Java编程]
本文“java下溯造型与运行期典范标识[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
由于我们在上溯造型(在担当构造中向上移动)期间丧失了具体的范例信息,所认为了获得具体的范例信息——亦即在分级构造中向下移动——我们必须利用 “下溯造型”技术.但是,我们知道一个上溯造型必定是安全的;底子类不大概再拥有一个比衍生类更大的接口.因此,我们通过底子类接口发送的每一条消息都必定可以接纳到.但在举行下溯造型的时刻,我们(举个例子来说)并不真的知道一个多少形状实际是一个圆,它完好大概是一个三角形、方形大概其他形状.
为办理这个问题,必须有一种办法可以保证下溯造型精确举行.只有这样,我们才不会冒然造型成一种错误的范例,然后发出一条对象不大概收到的消息.这样做是非常不安全的.
在某些语言中(如C++),为了举行保证“范例安全”的下溯造型,必须采纳特别的操作.但在Java中,全部造型城市自动得到查抄和核实!所以即便我们只是举行一次普通的括弧造型,进入运行期今后,仍旧会毫无包涵地对这个造型举行查抄,保证它的确是我们但愿的那种范例.假如不是,就会得到一个ClassCastException(类造型违例).在运行期间对范例举行查抄的行为叫作“运行期范例标识”(RTTI).下面这个例子向大家演示了RTTI的行为:
和在表示图中一样,MoreUseful(更有效的)对Useful(有效的)的接口举行了扩大.但由于它是担当来的,所以也能上溯造型到一个Useful.我们可看到这会在对数组x(位于main()中)举行初始化的时刻发生.由于数组中的两个对象都属于Useful类,所以可将f()和g()办法同时发给它们两个.并且假定试图调用u()(它只存在于MoreUseful),就会收到一条编译期出错提醒.//: RTTI.java // Downcasting & Run-Time Type // Identification (RTTI) import java.util.*; class Useful { public void f() {} public void g() {} } class MoreUseful extends Useful { public void f() {} public void g() {} public void u() {} public void v() {} public void w() {} } public class RTTI { public static void main(String[] args) { Useful[] x = { new Useful(), new MoreUseful() }; x[0].f(); x[1].g(); // Compile-time: method not found in Useful: //! x[1].u(); ((MoreUseful)x[1]).u(); // Downcast/RTTI ((MoreUseful)x[0]).u(); // Exception thrown } } ///:~
若想拜候一个MoreUseful对象的扩大接口,可试着举行下溯造型.假如它是精确的范例,这一行动就会成功.不然,就会得到一个ClassCastException.我们没必要为这个违例编写任何特别的代码,因为它指出的是一个大概在程序中任何地方发生的一个编程错误.
RTTI的意义远不但仅反映在造型处理上.比方,在试图下溯造型之前,可通过一种办法理解自己处理的是什么范例.整个第11章都在报告Java运行期范例标识的各个方面.
以上是“java下溯造型与运行期典范标识[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:多形性学习总结
- ·下一篇文章:java纯承当与扩大
- ·中查找“java下溯造型与运行期典范标识”更多相关内容
- ·中查找“java下溯造型与运行期典范标识”更多相关内容
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论