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类型强转
知乎: 首先基本数据类型不是对象,强转改的是值,分为有损和无损,有损会丢失数据细节. 然后对象,只有继承关系的类才能强转,改变的只是引用,而且向上转型是安全的,把你转为人类是安全的,你还是你,只是现在 ...
随机推荐
- OSU!(bzoj 4318)
Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1 ...
- APUE 学习笔记(六) 进程控制
1. fork 创建新进程 fork创建的新进程称为子进程,fork函数调用一次,返回两次. 两次返回的唯一区别就是子进程的返回值是0,而父进程的返回值是新子进程的进程ID 在fork之后是父进程先执 ...
- mybatis如何传入一个list参数
<!-- 7.2 foreach(循环List<String>参数) - 作为where中in的条件 --> <select id="getStudentLi ...
- JavaWeb学习总结(十三)——使用Session防止表单重复提交(转)
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...
- TYVJ 1305 最大子序和 ++ 烽火传递
描述 输入一个长度为n的整数序列,从中找出一段不超过M的连续子序列,使得整个序列的和最大. 例如 1,-3,5,1,-2,3 当m=4时,S=5+1-2+3=7当m=2或m=3时,S=5+1=6 输入 ...
- net9:图片变成二进制流存入XML文档,从XML文档中读出图片以及从XML文档中读取并创建图片文件
原文发布时间为:2008-08-10 -- 来源于本人的百度文章 [由搬家工具导入] fileToXml类: using System;using System.Data;using System.C ...
- 如果dom节点是动态添加进页面的,在页面节点绑定事件如何解决的问题。
如果dom节点是动态添加进页面,想在节点绑定事件,传统的做法就是遍历节点,但会出现问题,也肯能有其他的办法,突然想到 可以依据事件冒泡,这样就不惧页面后添加节点而不响应事件的问题.比较结实.示例代码如 ...
- [转] iOS应用中通过设置VOIP模式实现休眠状态下socket的长连接
转自:http://blog.csdn.net/missautumn/article/details/17102067 如果你的应用程序需要在设备休眠的时候还能够收到服务器端发送的消息,那我们就可 ...
- 关于Dijkstra 和 Bellman-ford算法的简单理解
两个算法都是跟求图的有源最短路径有关.Dijkstra主要针对的是无负权值节点的图,而Bellman-Ford算法则是可以处理有负权值的有向图的最短路径问题.两者都用到了一个“松弛计算”的方法,也就是 ...
- jQuery移动端手机键盘输入车牌号代码【附加新能源车牌】
最近在移动应用中要做到一个录取汽车牌号码的功能,在网上找了一个插件后发现没有增加新能源车牌功能, 和同事研究了一下,将其进行改造完美的实现了这个功能,这里放出该插件的源码: 原插件来自A5源码网[ht ...