java_类型强转
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_类型强转的更多相关文章
- python类型强转&二级容器
Number 类型强转 int : ---->>> float, bool, complex, str Float : ---->> ...
- Gson转换复杂对象报错【类型强转错误】
一.问题: 项目里遇到一个需求,规则文件下载后,导入本地解析. 采用的方案是:获取复杂对象,使用谷歌Gson转换为字串保存为文件下载,客户端读取文件,解析字串,反解对象 遇到的问题:传输的对象是一个嵌 ...
- scala如何解决类型强转问题
scala如何解决类型强转问题 scala属于强类型语言,在指定变量类型时必须确定数据类型,即便scala拥有引以为傲的隐式推到,这某些场合也有些有心无力. 例如: java同属强类型语言,但java ...
- java中Number Type Casting(数字类型强转)的用法
4.5 Number Type Casting(数字类型强转)隐式 casting(from small to big) byte a = 111; int b = a;显式 casting(from ...
- 2d-x中Lua类型强转问题
在Lua中,使用CCDictionary进行保存CCSprite对象,但是,在CCDictionary取出来的时候,此时是一个CCObject对象,无法调用子类精灵的一些方法.那只能进行强转的. 那么 ...
- 引用变量的类型强转以及InstanceOf方法的使用
引用到的类: class Person{ String name; } class Student extends Person{ String sut_no; } class ClassMate e ...
- 类型强转(type cast)
类型转换有 c 风格的,当然还有 c++风格的.c 风格的转换的格式很简单(TYPEEXPRESSION),但是 c 风格的类型转换有不少的缺点,有的时候用 c 风格的转换是不合适的, 因为它可以在任 ...
- Java中 如何把Object类型强转成Map<String, String>类型
首先你需要保证要转换的Object的实际类型是Map<String, String> 假设Object变量名为obj,强制转换(Map<String, String>)obj ...
- java类型强转
知乎: 首先基本数据类型不是对象,强转改的是值,分为有损和无损,有损会丢失数据细节. 然后对象,只有继承关系的类才能强转,改变的只是引用,而且向上转型是安全的,把你转为人类是安全的,你还是你,只是现在 ...
随机推荐
- jquery不同版本导致的checkbox设置了属性,但是没有选中效果
由于本人好久不做B/S了,今天同学问我个问题才发现了jquery版本还是存在差异的,今天写的就是关于获取checkbox属性的方式(可能不应该叫属性了其实,后面就知道了). 看下面的代码截图吧 < ...
- touch event 存疑
1.原声js与借用jquery输出来的事件列表却不一样 function touchPlay(e) { e.preventDefault(); console.log(e); } var screen ...
- SEO总结(一)
- class文件检查器
Class文件检查器保证装载的class文件内容有正确的内部结构,并且这些class文件互相间协调一致.Class文件检查器实现的安全目标之一就是程序的健壮性.如果某个有漏洞的编译器,或某个聪明的黑客 ...
- 标准C程序设计七---55
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- 关于Red5整合springMVC提示scope not found 的错误
https://www.cnblogs.com/qgc88:
- 牛客网 Wannafly挑战赛9 C.列一列-sscanf()函数
C.列一列 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K64bit IO Format: %lld 链接:https://www.now ...
- (49)C# npoi-word
//新建段落 XWPFParagraph p1 = doc.CreateParagraph(); //对齐方式 p1.SetAlignment(ParagraphAlignment.LEFT); p1 ...
- OS | monolithic kernel & microkernel
A monolithic kernel is a kernel where all services (file system, VFS, device drivers, etc) as well a ...
- 51Nod 约数之和
1220 约数之和 题目来源: Project Euler 基准时间限制:3 秒 ...