class One {
public void foo() {
System.out.println("One");
}
}
class Two extends One {
public void foo() {
System.out.println("Two");
}
public void dosth(){
System.out.println("Two again");
}
}
一、向上转型
One t = new Two(); //向上转型,即父类引用指向子类对象,此时子类对象的类型为父类的类型
t.foo();
t.dosth();//编译错误
结论:向上转型是安全的,但可能会丢失子类的某些特性
二、向下转型
One t = new Two();
t.foo();
t = (Two)t;
t.dosth();//编译错误
这样强制转换不成功,t 的类型仍然是One。
One t = new Two(); //向上转型
Two t1 = (Two)t; // 向下转型
t1.dosth();
向下转型成功。再例如:
Object obj = new int[] { 1, 2, 3 };
int[] someArray = (int[])obj;
for (int i : someArray) System.out.print(i + " ");
再举个例子:有两个类,Father是父类,Son类继承自Father。
Father f1 =new Son() ; //这就叫upcasting(向上转型)
//现在f1 引用一个指向一个Son 对象
Son s1 = (Son)f1 ; //这个叫downcasting(向下转型)
//现在f1还是指向Son对象
第二个例子:
Father f2 =new Father();
Son s2=(Son)f2; //出错,子类引用不能直接指向父类对象
你或许会问,在第一个例子中:Son s1=(Son)f1;为什么是正确的呢?
很简单因为f1指向指向一个子类对象,Father f1=new Son();子类s1引用当然可以指向子类对象了。
而f2被传给了一个Father对象,Father f2=new Father();子类s1引用不能指向父类对象。
总结:
1.父类引用指向子类对象,子类引用不能指向父类对象。
2.把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转型。
如Father f1=new Son();
3.把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转型。
如f1就是一个指向子类对象的父类引用,把f1赋给子类引用s1 即Son s1=(Son)f1;
其中f1前面的(Son)必须添加,进行强制转换。
4.upcasting 会丢失子类特有的方法(下面有说明),但是子类overriding 父类的方法,子类方法有效
5.向上转型的作用, 减少重复代码
分享到:
相关推荐
Java中强制类型转换共2页.pdf.zip
27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型...
下面小编就为大家带来一篇浅谈Java中强制类型转换的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
java 强制类型转换示例 java 强制类型转换示例 java 强制类型转换示例
类型转换分为强制手动类型转换和隐式自动类型转换 (1) 基本数据类型 (2) 引用数据类型 (3) 强制类型转换 (4) 包装数据类型
java 常用基础类型之强制转换 java 常用基础类型之强制转换
java代码-使用java解决强制转换的源代码 ——学习参考资料:仅用于个人学习使用!
有利于我们对java的理解,还有对Java泛型的理解,要精通java最好看一看
如标题所示,更多教程已经在主页记录,欢迎大家学习交流:...另外,主页专栏“Python从入门到人工智能”持续更新中,也欢迎大家订阅学习 和交流。
一、强制类型转换 [java] long ll = 300000; int ii = (int)ll; 二、调用intValue()方法 [java] long ll = 300000; int ii= new Long(ll).intValue(); 三、先把long转换成字符串String,然后在转行成Integer...
强制类型转换,也称显式类型转换,是指必须书写代码才能完成的类型转换。该类类型转换很可能存在精度的损失,所以必须书写相应的代码,并且能够忍受该种损失时才进行该类型的转换。 转换规则 从存储范围大的类型到...
Java 基本语法(三)——运算符和类型转换 Java 基本语法(三)——运算符和类型转换
小编对null进行强转会不会抛错,非常的好奇,下面小编通过实例代码给大家介绍Java中对null进行强制类型转换的方法,感兴趣的朋友参考下吧
主要介绍了解决Java中的强制类型转换和二进制表示问题,需要的朋友可以参考下
【IT十八掌徐培成】Java基础第02天-03.数据类型-强制类型转换.zip
golang是强类型语言,有强制类型转换,但是不同于Java语言所使用的强制类型转换。 golang强制类型转换 golang语言中分为类型转换(type conversion)、类型断言(type assertion)和指针类型转换。 类型断言 package ...
里主要讨论一下大数转小数,比如int类型转short类型。小数转大数,如short 转 int不做讨论,需要的朋友可以参考下
如果是 long转int (64位强制转32位,可能会出现溢出的问题,这个就看这个数字是不是够大了,如果比较大那就可能溢出,如果数字比较小,强制转换不会溢出) 但是用long转int可能会出现这个问题,所以不建议向下强制...
主要介绍了Java数值类型的转换与强制转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧