java技术专题综述之类型转换篇

上传人:第*** 文档编号:38762580 上传时间:2018-05-07 格式:PDF 页数:4 大小:64.25KB
返回 下载 相关 举报
java技术专题综述之类型转换篇_第1页
第1页 / 共4页
java技术专题综述之类型转换篇_第2页
第2页 / 共4页
java技术专题综述之类型转换篇_第3页
第3页 / 共4页
java技术专题综述之类型转换篇_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《java技术专题综述之类型转换篇》由会员分享,可在线阅读,更多相关《java技术专题综述之类型转换篇(4页珍藏版)》请在金锄头文库上搜索。

1、JAVA 技术专题综述JAVA 技术专题综述 之 类型转换篇类型转换篇 本文主要介绍 JAVA 中对象的类型转换机制。 首先定义 3 个类: class Super class Sub_One extends Super class Sub_Two extends Super 注意:Sub_One 和 Sub_Two 两个类有共同的父类 Super。 然后创建这 3 个类的对象: Super sup = new Super(); Sub_One sub1 = new Sub_One(); Sub_Two sub2 = new Sub_Two(); 在程序中的语句 转换 备注 编译/运行结果 s

2、up = sub1; 子类 ? 父类 编译和运行时都合法 sup = (Super)sub1; 子类 ? 父类 强制类型转换 编译和运行时都合法 sub2 = sub1; 子类 ? 子类 编译和运行时都不合法 sub1 = (Sub_One)sub2; 子类 ? 子类 强制类型转换 编译和运行时都不合法 sub1 = sup; 父类 ? 子类 编译和运行时都不合法 sub1 = (Sub_One)p; 父类 ? 子类 强制类型转换 编译时合法 运行时不合法 在 JAVA 中,如果把一个子类的对象赋值给其父类的引用,那么在编译时这个引用具有父类的 类型,但在运行时却指向子类的对象。下面用一些程序

3、来解释这句话。 示例示例 1: class Super public class Sub extends Super public void print() System.out.println(“sub“); public static void main(String args) Super test = new Sub(); test.print(); 1 下面是这个程序在 JDK 1.4 下的编译结果: Sub.java:12: cannot resolve symbol symbol : method print () location: class Super test.print

4、(); 1 error 程序在编译时,test 的类型为 Super,而在 Super 类中没有 print()方法,所以不能通过 编译。要使程序通过编译,需在 Super 类中增加 print()方法。请看示例 2。 示例示例 2: class Super public void print() System.out.println(“super“); public class Sub extends Super public void print() System.out.println(“sub“); public static void main(String args) Super

5、test = new Sub(); test.print(); 运行结果: sub 由于 test 在运行时为 Sub 类型,所以程序将调用 Sub 类的 print()方法。但这种类型转换 机制在原始数据类型上却有不同。请看示例 3。 示例示例 3: class Super public int k = 100; public class Sub extends Super 2 public int k = 200; public static void main(String args) Super test = new Sub(); System.out.println(test.k);

6、 运行结果: 100 从输出结果上看, test 在运行时为 Super 类型。 实际上在这个程序中, 把 Sub 类中的 public int k = 200;这条语句去掉也能得到上面的运行结果,所以 test 在编译和运行时好像都是 Super 类型。 对于示例 2 中的 test 在运行时到底是什么类型,可用下面的程序测试。 示例示例 4: class Super public void print() System.out.println(“super“); public class Sub extends Super public void print() System.out.pr

7、intln(“sub“); public static void main(String args) Super test = new Sub(); test.print(); if(test.getClass() = Sub.class) System.out.println(“test is an object of Sub class“); 运行结果: sub test is an object of Sub class 可见,test 在运行时确实是 Sub 类型。 对于示例 3 中的 test 在运行时到底是什么类型,可用下面的程序测试。 示例示例 5: 3 class Super

8、public int k = 100; public class Sub extends Super public int k = 200; public static void main(String args) Super test = new Sub(); System.out.println(test.k); if(test.getClass() = Sub.class) System.out.println(“test is an object of Sub class“); 运行结果: 100 test is an object of Sub class 可见,test 在编译时是 Super 类型,在运行时还是 Sub 类型。但为什么会输出 100 而不是 200 呢 重要的是: 请读者记住以上各种情况的输出结果。 为什么会输出 100 而不是 200 呢?我也没有 答案,也请读者指点迷津。 本文作者:徐明杰 SCJP/MCSE/MCDBA 2002.9 4

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号