java基础--向上/向下转型
2015-09-12 22:09
393 查看
基于java的继承,向上或者向下转型是一种常见的情景,在thinking in java对这一情况进行了详细说明,见以下例子:
在以上例子内,x[0],x[1]在对象实例化时,均向上转型,但是其子类是不一样的。因此在进行向下转型时,调用原本不存在的方法,则会报错,见下面第二行代码:
这个涉及到Run-Time Type Information(RTTI)概念。由于java在编译时很难确切知道一个类的实际类型,那么在代码运行期间,则会进行类型检查,若类型相符则正常运行,类型异常则抛出ClassCastException.
如果想知道一个类是否可以进行向下转型,可以使用instanceof方法进行判断,
结果返回1.
看了上面的例子,就可以大概了解转型这个概念。实际上,转型在日常开发中使用的很多,比如以下代码:
其实这也是转型。由ArrayList向上转型为List,只不过平时写的太6了,没感觉到而已。
[code]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 } }
在以上例子内,x[0],x[1]在对象实例化时,均向上转型,但是其子类是不一样的。因此在进行向下转型时,调用原本不存在的方法,则会报错,见下面第二行代码:
((MoreUseful)x[1]).u(); // Downcast/RTTI ((MoreUseful)x[0]).u(); // Exception thrown
这个涉及到Run-Time Type Information(RTTI)概念。由于java在编译时很难确切知道一个类的实际类型,那么在代码运行期间,则会进行类型检查,若类型相符则正常运行,类型异常则抛出ClassCastException.
如果想知道一个类是否可以进行向下转型,可以使用instanceof方法进行判断,
[code] return (x[1] instanceof Useful) ? 1 : 0;
结果返回1.
看了上面的例子,就可以大概了解转型这个概念。实际上,转型在日常开发中使用的很多,比如以下代码:
[code]List<String> stringList = new ArrayList<>();
其实这也是转型。由ArrayList向上转型为List,只不过平时写的太6了,没感觉到而已。
相关文章推荐
- Java 运算符优先级以及一些小题
- java设计模式第7弹--观察者模式
- Eclipse下安装keil插件和导入keil工程教程
- Eclipse遇到Initializing Java Tooling终极解决办法
- java web学习心得与总结(四)——servlet技术
- java web学习心得与总结(三)——javaBean技术
- 在Eclipse下编译Keil MDK工程
- 用eclipse做的一个短信发送器,编译通过但是部署到模拟器上面出错
- java练习:打印 数字1、2、3、4的组合,不能以4开头,1和3不能相邻,且数字不能重复
- Windows7系统下JAVA运行环境下载、安装和设置
- Java位运算
- Struts基本开发搭建步骤-总结
- Java分页类 Page
- [Java Concurrency in Practice]第十六章 Java内存模型
- JavaServlet服务端与客户端简单交互
- 计算两个字符串间符合字典序且在一定长度内的字符串个数
- java中string与其他类型数据之类的转换
- Hadoop/spark安装实战(系列篇2)安装虚拟机、PieTTY、winscp、JDK、配置DNS、SSH免密码登录
- JAVA课堂笔记1
- Spring4新特性——更好的Java泛型操作API