1.向上转换

父类的引用变量指向子类变量时,子类对象向父类对象向上转换。从子类向父类的转换不需要什么限制,只需直接蒋子类实例赋值给父类变量即可,这也是Java中多态的实现机制。

2.向下转换

在父类变量调用子类特有的、不是从父类继承来的方法和变量时,需要父类变量向子类转换。

为什么要向下转换?

在继承关系中,有一些方法是不适合由父类定义并由子类继承并重写的,有些方法是子类特有的,不应该通过继承得到,且子类可能也会有自己特有的成员变量,那么在使用多态机制的时候,若我们要通过父类型变量使用到这些子类特有的方法和属性的话,就需要将服类型变量转换成对应的子类型变量。一个典型例子便是标准库中的数据类型包装类:Integer类,Double类,Long类等,它们都继承自Number类,且它们都有一个方法叫做compareTo用于比较两个同样的类型。然而这个方法是这些子类通过实现Comparable接口来实现的,在Number类中并没有该方法的实现,因此若要通过Number类型变量来使用compareTo方法,就要先将Number类转换成子类的对象。

注意

父类变量向子类转换必须通过显式强制类型转换,采取和向上转换相同的直接赋值方式是不行的;并且,当把一个父类型变量实例转换为子类型变量时,必须确保该父类变量是子类的一个实例,从继承链的角度来理解这些原因:子类一定是父类的一个实例,然而父类却不一定是子类的实例。在进行父类向子类的转换时,一个好的习惯是通过instanceof运算符来判断父类变量是否是该子类的一个实例,否则在运行时会抛出运行异常ClassCastException,表示类转换异常。

java 子类 父类 转换_Java子类与父类之间的类型转换相关推荐

  1. java int 64 转换_Java中数据类型及其之间的转换

    Java中数据类型及其之间的转换 Java中数据类型及其之间的转换 基本的数据类型 基本类型有以下四种: 1)int长度数据类型有:byte(8bits).short(16bits).int(32bi ...

  2. java 用户自定义的父类转换成子类的方法

    在工作中,一般是实体类对应的数据库表,另外再定义一个Model继承实体类,在model里往往添加一些辅助的属性.我们从数据库查出的数据放在实体类里,但是展现数据时需要用到model类,这时就需要把实体 ...

  3. java 父类转换成子类的方法

    /* 父类转换成子类的特点: 1:父类转换成子类不能自动完成 2:父类转换成子类的前提是父类的真身是这个子类 3:如果这个父类的真身是子类B,不能强制转换成子类A,只能转换成B. */ class T ...

  4. 父类转换成子类, 或者是类之间属性拷贝

    问题很怪, 其实本不应该这么做的, 将父类转换成子类本就是不安全的行为. 但哪有事事顺心的, 真遇到了还是得解决. /*** 父类*/ class Foo {private String name; ...

  5. java 子类转换_java 子类父类相互转换

    子类转父类 (父类引用指向子类对象) 子类可以转换为父类,如下父类FruitTest与其子类AppleTest classFruitTest { String str= "FruitTest ...

  6. java 子类属性覆盖_java子类和父类属性重复问题

    java 子类继承 父类, 但子类中 包含和父类相同 属性 ,给子类赋值之后,父类的相同的属性值还是空的. 类定义如下: public class Person { private String na ...

  7. java子类继承父类实例_Java子类继承父类详解

    别和我说你真的懂了继承,先来看下面的代码,回答出我的问题再说 代码很简单,如下: 父类: public class T { public void run() { System.out.println ...

  8. java继承对象转换_java中类与对象的继承重写,存储以及自动转换和强制转换。...

    对象的继承 继承关键字:extends 继承的格式: public class 类名 extends 父类名{ } 注:一个类只能继承一个父类.子类继承父类的全部内容. 访问修饰符同类中 同包中 不同 ...

  9. java继承对象转换_java 继承的基础(转)

    java 继承的基础(转)[@more@]继承是面向对象编程技术的一块基石,因为它允许创建分等级层次的类.运用继承,你能够创建一个通用类,它定义了一系列相关项目的一般特性.该类可以被更具体的类继承,每 ...

最新文章

  1. Markdown 基础语法 记录 复制到 typora 中就可以看出来了呦,或者预览哟
  2. 学习进度(2016.3.13)
  3. 通用数据库管理工具_了解为什么这个直观的工具是您团队的通用团队管理工具...
  4. Python计算整数阶乘的几种方法比较
  5. 新编译的GDAL1.9 C/C++ C# Python版本
  6. Daily Report 2012.10.30 刘宇翔
  7. 2018数学建模国赛A题《高温作业专用服装设计》优秀论文(本文由西南民族大学白白不加糖、薄荷CC糖原创)
  8. 阿里云 mysql 版本_阿里云数据库RDS MySQL版如何选择?
  9. 翻牌记忆类H5游戏的春天
  10. android windows 共享文件,安卓手机如何访问电脑局域网共享的文件
  11. Oracle system identifier already exists specify another SID
  12. win10 损坏的映像 0xc000012f
  13. 关于组织 2021年全国大学生数学建模竞赛的通知
  14. Java将带小数点的String类型值转换成int值
  15. 服务器esxi虚拟机升级,ESXi 服务器安装升级补丁
  16. P3480 [POI2009]KAM-Pebbles 题解
  17. JS动态创建元素(两种方法)
  18. android上消息推送的实现
  19. [渝粤教育] 山东大学 大学物理 参考 资料
  20. [4G5G专题-111]:部署 - LTE 基站站址勘察、设计与选择

热门文章

  1. 聊一聊 cookie
  2. css各兼容应该注意的问题
  3. Android 通信 EventBus
  4. SurfaceView类透明背景设置
  5. Oracle 表空间与数据文件
  6. 业界资讯:adobe 技术开发中心 放出游戏单元
  7. C#中读取“已注册的文件类型”的图标及读取指定文件图标的方法 (转)
  8. 定制化你的ReactNative底部导航栏
  9. 感知机模型的对偶形式[转载]
  10. 4001.基于双向链表的双向冒泡排序法