- 浏览: 87308 次
- 性别:
- 来自: 广州
最新评论
关于类型,我们说了不少,现在大家能够理解的是,类型是变量指针所指的特定地址段可存储的数据类型描述。理论上,该段地址只可以接收相同类型的数据。实际上,只要符合今天介绍的几个规则,不同类型之间也可以实现强转。
首先看看以下例子:
上面的代码是合法的,也就是说,我们把Integer对象实例强行存放到Object类型指针obj中。并且,从控制台显示的结果来看,这个实例仍然是Integer类型,只是由于obj指针对外宣称是Object类型,因此我们无法访问子类Integer的其它方法。
因此我们可以知道,父类指针可以接收子类对象的类型强转。此时父类的指针就是子类实例的一个映射,它只开放父类的方法及属性,而隐含了子类的其它方法及属性。
所以我们也需要更正一下我们对于指针的理解。并不是指针限制了存储数据的大小和类型,而是指针限制了对外访问特定地址段数据的方法。也就是说,指针只是告诉我们某某地址段中我们可以访问什么,如果地址段存储的类和指针类型完全没有交集,即使有关系也无法直接通过类型强转访问。不过后期的代理倒可以做到,不过这个已经是说类映射这种高级行为时介绍的东西了。
除了父类和子类可以强转之外,还有以下类之间可以强转:
实现类 --> 强转为 --> 抽象类
实现类 --> 强转为 --> 接口类
容量小的简单类型 --> 强转 --> 容量大的简单类型
* 容量大的简单类型 --> 强转 --> 容量小的简单类型
$ 父类 --> 强转为 --> 子类
注意*号的转换,虽然时支持的,但是如果待转换的数据大小超出转换后的大小的话,强转之后的结果会和原来的不一样,看看下面的例子:
执行结果:
所以最后一种我们不建议使用。
当然,像$所指的情况,不会引起编译错误,但是实际上运行的时候会出问题:
虽然代码可以编译通过,但是运行结果如下:
综合来说,逆转换都是危险的。大家要去避免。
今天涉及到接口、抽象类这两个概念,将于明天给大家介绍。
首先看看以下例子:
package typeconvert; public class TypeConvertionDemo1 { public static void main(String[] args) { Object obj = (Object)new Integer(1); System.out.println(obj.getClass()); } }
上面的代码是合法的,也就是说,我们把Integer对象实例强行存放到Object类型指针obj中。并且,从控制台显示的结果来看,这个实例仍然是Integer类型,只是由于obj指针对外宣称是Object类型,因此我们无法访问子类Integer的其它方法。
因此我们可以知道,父类指针可以接收子类对象的类型强转。此时父类的指针就是子类实例的一个映射,它只开放父类的方法及属性,而隐含了子类的其它方法及属性。
所以我们也需要更正一下我们对于指针的理解。并不是指针限制了存储数据的大小和类型,而是指针限制了对外访问特定地址段数据的方法。也就是说,指针只是告诉我们某某地址段中我们可以访问什么,如果地址段存储的类和指针类型完全没有交集,即使有关系也无法直接通过类型强转访问。不过后期的代理倒可以做到,不过这个已经是说类映射这种高级行为时介绍的东西了。
除了父类和子类可以强转之外,还有以下类之间可以强转:
实现类 --> 强转为 --> 抽象类
实现类 --> 强转为 --> 接口类
容量小的简单类型 --> 强转 --> 容量大的简单类型
* 容量大的简单类型 --> 强转 --> 容量小的简单类型
$ 父类 --> 强转为 --> 子类
注意*号的转换,虽然时支持的,但是如果待转换的数据大小超出转换后的大小的话,强转之后的结果会和原来的不一样,看看下面的例子:
package typeconvert; public class PrimitiveConvertionDemo { public static void main(String[] args) { System.out.println((int)123456789012345678L); } }
执行结果:
所以最后一种我们不建议使用。
当然,像$所指的情况,不会引起编译错误,但是实际上运行的时候会出问题:
package typeconvert; public class TypeConvertionDemo2 { public static void main(String[] args) { Integer obj = (Integer)new Object(); System.out.println(obj.getClass()); } }
虽然代码可以编译通过,但是运行结果如下:
综合来说,逆转换都是危险的。大家要去避免。
今天涉及到接口、抽象类这两个概念,将于明天给大家介绍。
发表评论
-
JAVA简单教程:数据库操作(三)——PreparedStatement和动态SQL
2010-03-12 12:30 8603如果我们的SQL语句是固 ... -
JAVA简单教程:数据库操作(二)
2010-03-10 11:09 2129今天来分析一下上次的 ... -
JAVA简单教程:数据库操作(一)
2010-03-05 16:40 1860最近依然是事情太多,一直无法坚持每天写份blog,对不起大家。 ... -
每天JAVA简单教学:枚举类
2010-02-02 14:41 1505今天给大家介绍一个JDK1.5的新特性:枚举类 先来看看以下 ... -
每天JAVA简单教学:类定义,成员类,抽象类及接口类
2010-01-27 11:58 1558最近忙得快疯掉了,而且着凉了病得好辛苦。。。不过今天还是能抓紧 ... -
每天JAVA简单教学:简单数据类型、地址比较和值比较
2010-01-18 11:48 2240昨天说了布朗运算,今天详细解释一下其中的==运算符和Objec ... -
每天JAVA简单教学:布朗运算
2010-01-15 14:46 2219布朗值,就是true和false,对于产生这两个值的运算,就是 ... -
每天JAVA简单教学:基本运算符
2010-01-13 18:09 1054今天来介绍一些基础运算符,先用int整数类型做介绍,最后用St ... -
每天简单JAVA教学:循环语法(二)
2010-01-07 10:07 1428自从JRE升级到1.5以后,java的for循环就更加方便了。 ... -
每天简单JAVA教学:循环语法(一)
2010-01-06 13:32 2055现在开始介绍跟变成有密切关系的Java语法,首先来介绍循环的写 ... -
每天简单JAVA教学:super和this
2010-01-05 11:49 1538因为实在太忙这么多天来都没时间上来写东西,感觉非常对不起大家。 ... -
每天简单JAVA教学:变量
2009-12-28 16:02 1222很抱歉,最近事忙,所以很少有时间上来写东西,希望大家见谅。 ... -
每天简单JAVA教学:类继承,重写、重构及重载,final的用法
2009-12-23 12:25 3967昨天事忙,所以没时间给大家写blog,抱歉一下。 今天说的内 ... -
每天简单JAVA教学:JVM的内存管理,static的用法
2009-12-21 14:41 2561今天的主题是介绍static和final这两个指示器的用法。但 ... -
每天简单JAVA教学:Modifier
2009-12-18 10:31 9503昨天给大家介绍了怎么进行同一个类里面的方法调用,今天将会给大家 ... -
每天简单JAVA教学:方法的调用
2009-12-17 14:59 1238继续我们的简单教学。 ... -
每天简单JAVA教学:第一个main程序分析
2009-12-16 23:12 1541上次我们轻松地完成了H ... -
每天简单JAVA教学:Hello World!
2009-12-16 00:39 1499以下文章只适合新手,新是很新很新的新。。。。自认对编程和JAV ...
相关推荐
适合练手、课程设计、毕业设计的Java项目源码:简易订销管理系统.rar 适合练手、课程设计、毕业设计的Java项目源码:简易订销管理系统.rar 适合练手、课程设计、毕业设计的Java项目源码:简易订销管理系统.rar 适合...
java教学课件:10Java--RMI.ppt
java教学课件:第一章 Java的类.ppt
java教学课件:第2章 Java小应用.ppt
搜集整理关于java错误处理:java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: Java heap space 资料整理
java教学课件:第4章 异常.ppt
Java并发编程:设计原则与模式(第二版).pdf
java教学课件:第3章 事件处理.ppt
java教学课件:第7章 多线程.ppt
java教学课件:第8章 网络功能.ppt
java教学课件:第9章 分布对象技术.ppt
java教学课件:第6章 数据流的运用.ppt