`
sean2012
  • 浏览: 44697 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

自动转型VS强制转型

阅读更多
自动转型VS强制转型


一、 为什么要转型?
对象与对象之间的数据不匹配;因此需要转型。

二、 什么时候是自动转型?什么时候需要强制转型?
最直接的答案就是不能自动转型,那我们就强制转型。最终的目的就是把一个对象赋给另一个对象。

然而我们还是可以分析一下,就可以得出更具体的答案。
举个生活中的例子:
父亲和儿子——我们常常听人家说,某某家的儿子长得很像他爸爸。
父亲 = (自动转型)儿子;
   ——是否听过,某某家的爸爸长得很像他儿子。
儿子 = (不能自动转型)父亲;
那么,我们可以看出,父亲一定是可以包含儿子内的所有属性,而儿子是不能包含父亲内的所有属性。如果有人硬要说“某某家的爸爸长得很像他儿子。”这样不符合逻辑的话,就只能强制这么说了。
儿子 = (强制转型)父亲;
相信通过这个例子你就能明白自动转型和强制转型的实质是什么了。

三、 实例分析
package TextRewrite;
/**
 * 主程序类
 * @author Sean 2012 - 8
 */
public class Master {
	/**
	 * 主程序入口
	 * @param args
	 */
	public static void main(String[] args) {
		/**
		 * 创建三个学生信息
		 */
		Student student1 = new Student();
		Student student2 = new CollegeStudent();
		CollegeStudent student3 = new CollegeStudent();
		/**
		 * 调用对象中的print方法
		 */
		student1 = student3;
		student1 = student2;
		student2 = student1;
		student2 = student3;
		student3 = (CollegeStudent)student1;
	}
}


    通过上例可以看出,因为student1是父类,而student3是子类;父类是不能直接赋值给子类的, 除非强制转型(CollegeStudent)student1。而其它赋值语句都可以自动转型。
    另外,当我们使用其它基本类型时都可以通过强制转型的方法来赋值,但并非所有的强制转型赋值都是有意义的。

分享到:
评论

相关推荐

    Java 多态的中转!!//有趣的编程故事!!

    向上转型(自动类型提升) 从子到父:父类引用指向子类的对象 父类 父类对象名 = new 子类(); 向下转型(强制类型转换) 从父到子:父类引用转为子类的对象 子类 子类对象名 = (子类)父类对象; 好处: 向上转型:...

    21天学会Java之(Java SE第五篇):继承、常用的关键字、封装及权限修饰符、多态

    文章目录继承常用的关键字this关键字static关键字super关键字final关键字封装及权限修饰符封装的作用及其优点权限修饰符封装的使用细节多态多态的概念多态的使用要点对象的转型instanceof运算符类型自动提升及强制...

    【04-面向对象(上)】

    向上转型是自动的。 •强制类型转换: 类型转换运算符是小括号,语法如下(type)variable; instanceof运算符 •前一个操作通常是一个引用类型的变量,后一个操作通常是一个类(也可以是接  口)。...

    CLR.via.C#.(中文第3版)(自制详细书签)Part1

    21.8 Dispose模式:强制对象清理资源 21.9 使用实现了Dispose模式的类型 21.10 C#的using语句 21.11 一个有趣的依赖性问题 21.12 手动监视和控制对象的生存期 21.13 对象复活 21.14 代 21.15 用于本地资源的...

    CLR.via.C#.(中文第3版)(自制详细书签)

    21.8 Dispose模式:强制对象清理资源 21.9 使用实现了Dispose模式的类型 21.10 C#的using语句 21.11 一个有趣的依赖性问题 21.12 手动监视和控制对象的生存期 21.13 对象复活 21.14 代 21.15 用于本地资源的...

    内存操作模块!通过汇编和API实现!-易语言

    并且E的自定义数据类型里小于4字节的成员会被扩展为4字节,以实现对齐如果结构像平时那样直接声明为结构时,E会自动把结构转换为C/C++中的标准的那种,但结构写为通用型时E只简单传递结构指针不做转换R_指针到数据_...

    CLR.via.C#.(中文第3版)(自制详细书签)Part3

    21.8 Dispose模式:强制对象清理资源 21.9 使用实现了Dispose模式的类型 21.10 C#的using语句 21.11 一个有趣的依赖性问题 21.12 手动监视和控制对象的生存期 21.13 对象复活 21.14 代 21.15 用于本地资源的...

    CLR.via.C#.(中文第3版)(自制详细书签)Part2

    21.8 Dispose模式:强制对象清理资源 21.9 使用实现了Dispose模式的类型 21.10 C#的using语句 21.11 一个有趣的依赖性问题 21.12 手动监视和控制对象的生存期 21.13 对象复活 21.14 代 21.15 用于本地资源的...

    Java范例开发大全 (源程序)

     实例10 转型运算符 17  2.3 其他形式 18  实例11 常量与变量 18  实例12 各种进制的转换 19  实例13 Java中的进制与移位运算符 22  第3章 条件控制语句(教学视频:75分钟) 26  3.1 if控制语句 26 ...

    java范例开发大全(pdf&源码)

    实例10 转型运算符 17 2.3 其他形式 18 实例11 常量与变量 18 实例12 各种进制的转换 19 实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份...

    java范例开发大全源代码

     实例10 转型运算符 17  2.3 其他形式 18  实例11 常量与变量 18  实例12 各种进制的转换 19  实例13 Java中的进制与移位运算符 22  第3章 条件控制语句(教学视频:75分钟) 26  3.1 if控制语句...

    java范例开发大全

    实例10 转型运算符 17 2.3 其他形式 18 实例11 常量与变量 18 实例12 各种进制的转换 19 实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份...

    Java范例开发大全(全书源程序)

    实例10 转型运算符 17 2.3 其他形式 18 实例11 常量与变量 18 实例12 各种进制的转换 19 实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断...

    java源码包---java 源码 大量 实例

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    java源码包2

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    java源码包3

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    java源码包4

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

Global site tag (gtag.js) - Google Analytics