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_类型强转的更多相关文章

  1. python类型强转&二级容器

    Number 类型强转 int :         ---->>>   float,  bool,  complex,  str Float :        ---->> ...

  2. Gson转换复杂对象报错【类型强转错误】

    一.问题: 项目里遇到一个需求,规则文件下载后,导入本地解析. 采用的方案是:获取复杂对象,使用谷歌Gson转换为字串保存为文件下载,客户端读取文件,解析字串,反解对象 遇到的问题:传输的对象是一个嵌 ...

  3. scala如何解决类型强转问题

    scala如何解决类型强转问题 scala属于强类型语言,在指定变量类型时必须确定数据类型,即便scala拥有引以为傲的隐式推到,这某些场合也有些有心无力. 例如: java同属强类型语言,但java ...

  4. java中Number Type Casting(数字类型强转)的用法

    4.5 Number Type Casting(数字类型强转)隐式 casting(from small to big) byte a = 111; int b = a;显式 casting(from ...

  5. 2d-x中Lua类型强转问题

    在Lua中,使用CCDictionary进行保存CCSprite对象,但是,在CCDictionary取出来的时候,此时是一个CCObject对象,无法调用子类精灵的一些方法.那只能进行强转的. 那么 ...

  6. 引用变量的类型强转以及InstanceOf方法的使用

    引用到的类: class Person{ String name; } class Student extends Person{ String sut_no; } class ClassMate e ...

  7. 类型强转(type cast)

    类型转换有 c 风格的,当然还有 c++风格的.c 风格的转换的格式很简单(TYPEEXPRESSION),但是 c 风格的类型转换有不少的缺点,有的时候用 c 风格的转换是不合适的, 因为它可以在任 ...

  8. Java中 如何把Object类型强转成Map<String, String>类型

    首先你需要保证要转换的Object的实际类型是Map<String, String> 假设Object变量名为obj,强制转换(Map<String, String>)obj ...

  9. java类型强转

    知乎: 首先基本数据类型不是对象,强转改的是值,分为有损和无损,有损会丢失数据细节. 然后对象,只有继承关系的类才能强转,改变的只是引用,而且向上转型是安全的,把你转为人类是安全的,你还是你,只是现在 ...

随机推荐

  1. linux监控平台搭建-内存

    linux监控平台搭建-内存 上一篇文章说的硬盘.就写一下.更加重要的东西.在手机上面是RAM.机器是memory.内存是按照字节编址.每个地址的存储单元可以存放8bit的数据.cpu 通过内存地址获 ...

  2. Java实现一致性Hash算法

    Java代码实现了一致性Hash算法,并加入虚拟节点.,具体代码为: package com.baijob.commonTools;   import java.util.Collection; im ...

  3. javaweb学习总结(十一)——使用Cookie进行会话管理(转)

    一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...

  4. word文档的导出(用freemarker模板导出)(桃)

    1.将要导出的word文档另存为xml格式的 2.用文档编辑器打开(如:notepad++),将要展示的数据用${name}的形式替换,“name”对应数据库中的字段 3.根据模板生成 package ...

  5. unity3d自动寻路教程

    U3D的自动寻路插件是不少,但是其实U3D的PRO版本就提供了相当实用的自动寻路组件了,以下教程分别讲解自动寻路的路径选择优先,上楼梯跳下的条件判断等等实用方法,教程分三编,但这个教程没有讲到Navm ...

  6. CodeForces 380.C Sereja and Brackets

    题意 一串括号序列,只由(和)组成,然后是m个提问,提问l和r区间内,最大的匹配匹配括号数. 思路 第一,贪心的思想,用最正常的方式去尽量匹配,详细点说就是,先找到所有的(),然后删除这些(),再找所 ...

  7. linux命令——ll详解

    一.ll命令 ll并不是linux下一个基本的命令,它实际上是ls -l的一个别名. Ubuntu默认不支持命令ll,必须用 ls -l,这样使用起来不是很方便. 如果要使用此命令,可以作如下修改:打 ...

  8. js-随机生成16进制颜色

    <body onload="color()"></body> <script> function color(){ 方法一: document. ...

  9. luogu P2066 机器分配

    题目背景 无 题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M≤15 ...

  10. 深入理解Activity启动流程(二)–Activity启动相关类的类图

    本文原创作者:Cloud Chou. 欢迎转载,请注明出处和本文链接 本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 在介绍Activity的详细启动流程之前,先 ...