java_类型强转
2013-11-09 14:46
225 查看
class Father{ public void fromFather(){ System.out.println("fromFather"); } } interface interfaceSon{ public void fromInterSon(); } class Son extends Father implements interfaceSon { public void fromFather(){ System.out.println("fromFather2"); } public void formSon(){ System.out.println("fromSon"); } public void fromInterSon(){ System.out.println("formInterfaceOfSon"); } } class Test{ public void test1(Father f){ f.fromFather(); // the method is not the method of super, // which has be overwritten,but now can be used by super // f.fromSon(); // 0: can not be compiled,need create method in Father System.out.println("--------"+f.toString()); // 1: com.h.Son@1bab50a System.out.println("--------"+f.getClass()); // 1: class com.h.Son } public void test2(Father f){ ((Son)f).fromFather(); ((Son)f).formSon(); ((Son)f).fromInterSon(); System.out.println("--------"+f.toString()); // 2: com.h.Son@1bab50a System.out.println("--------"+f.getClass()); // 2: class com.h.Son } public void test3(Father f){ ((interfaceSon)f).fromInterSon(); System.out.println("--------"+f.toString()); // 3: com.h.Son@1bab50a System.out.println("--------"+f.getClass()); // 3: class com.h.Son /* 假如Son没有实现接口时,即:未标有 implements interfaceSon, 编译还是不会报错,但运行时会出现转换异常, ----:Son cannot be cast to interfaceSon */ } } public class TypeConvert{ public static void main(String args[]){ Son s = new Son(); Test t = new Test(); t.test1(s); t.test2(s); t.test3(s); /* Father f = new Father(); s = (Son)f; //4: java.lang.ClassCastException */ } }
强制类型转换:
1 基本数据类型转换:
一种是类型兼容的,那么Java 将自动地进行转换,
如: form int to float
另一种不兼容(缩小转换):一种增加()的显式的类型变换,
如: int to byte ,(会%256变为byte) ,
如: float to int (损失精度)
2 引用数据类型转换:( 也为显示的类型转换)
1 因为一旦一个对象创建了,对象的类型已经确定,
也可以不用这个类型变量引用她,
2.父类变量:
用子类类型引用交给了父类变量,(上转型)
但是你又想使用他原本的的特异功能,
这个时候你可以又将其强转为子类,
(但是如果对象本身就是父类类型,强转就会出错,见注释:4)
3.接口变量引用:
接口变量本身之只能通过实现它的类来获得其引用(接口回调)
理解:
1. 编译器值检查类型之间有无继承,或实现关系,有则通过;
运行时则检查真正的类型,否则报错;
2。由上面1 2 3 的注释,
即使子类,或实现接口的类将引用给了其他变量来引用,
但还是不会改变他原有属性, 一旦强转了,所引用的变量对原有的属性
(如:son)将会选择性的拥有,
3 假如将Son看做若干房间(方法看做房间)的拥有者,其包括:
自己特有方法,实现接口的方法,继承父类的方法,
(内存中也有未继承的方法)
1. 父类只有父类的钥匙,
只能开未继承的房间(自己的),继承或重写的,如:注释 0,
??---:test1()中f.fromFather()
为什么结果会是fromFather2,,呵呵因为重写覆盖了了;
2. 接口变量值拥有,开启实现的方法,
相关文章推荐
- java,hibernate和数据库对应的数据类型
- java事务类型
- 关于语言的动态静态类型,强弱类型(c,c++,java,php等)
- Java中数据类型的分类
- java图片大小处理(缩放&切割&类型转换&色彩转换)
- 黑马程序员_java-基本数据类型的对象包装类-Math类-Random类-Scanner类<六>
- Java基本数据类型和长度
- java八大基本类型初始化
- java从Object类型转换成double类型
- Java中锁的类型
- 【JAVA基础小问题】Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
- JAVA从MySQL取出datetime类型的字段输出后多了个".0"
- java和mysql之间的时间日期类型传递【原】
- JAVA学习脚印2: 数据类型和运算符
- java中Integer 与 String 类型的 相互 转换
- 常用的java类型转json的转换类
- Java:基本类型和字符串的转换
- 【自用】Javanote170801(封装、多态、instanceof运算符、对象转换类型、final关键字、参数传递)
- 第六个Java程序,实现基本类型的转换。
- java中的各种数据类型在内存中存储的方式