一、向上转型和向下转型

向上转型和向下转型是在JAVA继承操作中用到的东西,在讲到转型之前我们需要认识到继承过程中的对象类型转换,这种转换有两个特点:

             1.这是继承过程中发生的操作

             2.新类是现有类的一种类型。这种说法主要是因为现有类的方法必定存在于新类中,所以通过现有类发送的信息(就是通过创建一个对象进行操作)可以直接通过新类发送。

二、向上转型

向上转型:创建一个基类的引用,但是在创建对象的时候是用的导出类的。示意图如下:

由图可知:由导出类转型成基类,在继承图上是向上移动的。同时由于是从较专用类型向较通用类型转换,所以是安全的,因为专用类型肯定包含通用类型。

特点:

1.把导出类对象直接赋给基类类引用,不用强制转换

            2.引用可以直接使用基类中的方法,但是不能使用导出类的方法

            3.从导出类向上转型,永远不需要知道正在处理的对象的确切类型

            4.在向上转型过程中可能发生类接口中方法丢失

示例 :

class Fupcasting{public Fupcasting(String ident) {System.out.println("i am " + ident);}public void count() {}
}
public class Upcasting extends Fupcasting{public Upcasting(String ident) {super(ident);// TODO Auto-generated constructor stub}public void add() {}public static void main(String[] args) {String  name = "fatherupcasting";// TODO Auto-generated method stubFupcasting fupcasting = new Upcasting(name);    //向上转型fupcasting.count();//fupcasting.add();   //使用导出类的方法报错}}

 三、向下转型

向下转型可以参照向上转型,二者正好相反。这里使用向下转型的原因是因为上述的向上转型的第三条的关系:从导出类向上转型,永远不需要知道正在处理的对象的确切类型!

解释如下:

可知:导出类可以完全代替基类,在使用它们的时候,完全不需要知道关于子类的任何信息。

这里如果你清楚  引用对象  的概念,你就会明白,当我们在向上转型的时候,你处理的导出类的对象你完全不清楚确切类型,这里的类型可以是 基类,也可以是导出类,也就是这一步:

Fupcasting fupcasting = new Upcasting(name);  

你也可以写成这样:

Fupcasting fupcasting = (Fupcasting)new Upcasting(name);    

或者这样:

Fupcasting fupcasting = (Upcasting)new Upcasting(name);    

这里的   (Upcasting)  和 (Fupcasting)  都声明了我们创建的对象的类型,但是在向上转型的过程中我们是这样做的:

Fupcasting fupcasting = new Upcasting(name);  

通过上面的步骤我们知道我们并不清楚这个对象是什么类型的,所以如果在一定的情况下要获取类型信息,就会用到向下转型!

向下转型示意图:

借用上面的shape图,如果现在我们知道有一个几何图形,但是我们不清楚它是圆、正方形等,但是它的形状肯定是唯一确定的。

实例:

class Fupcasting{public Fupcasting(String ident) {System.out.println("i am " + ident);}public void count() {}
}
public class Upcasting extends Fupcasting{public Upcasting(String ident) {super(ident);// TODO Auto-generated constructor stub}public void add() {}public static void main(String[] args) {String  name = "fatherupcasting";// TODO Auto-generated method stub// Fupcasting fupcasting = (Upcasting)new Upcasting(name);    //向上转型//    fupcasting.count();//fupcasting.add();   //使用导出类的方法报错Upcasting upcasting = (Upcasting) new Fupcasting(name);   //向下转型upcasting.add();}}

特点:

 1.向下转型可以调用子类类型中所有的成员

   2.父类引用对象指向的是子类对象,那么在向下转型的过程中是安全的,就是编译是不会出错误。但是如果父类引用对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会             出现 Java 强制类型转换异常

如果觉得对你有帮助,点个赞再走吧!

JAVA中的向上转型和向下转型相关推荐

  1. Java中的向上转型及向下转型

    我们都知道Java的三大特性:封装.继承.多态. Java中的向上转型及向下转型体现了Java中的继承性及多态性,所谓继承,不难理解,存在于子父类间,子类继承父类中不被私有化的属性和方法.而多态性,顾 ...

  2. java中向上转型和向下转型浅析

    基础概念 向上转型就是子类对象被父类引用,例如动物和小鸟的关系,小鸟属于动物,动物不仅仅只包含小鸟,还包含猫和狗等,例如: Animal  birdAnimal = new Bird();这种方式就是 ...

  3. 【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货

    –本文摘要–     1.本文的目标读者:是了解Java基础,且对面向对象概念有所了解,但是对Java中继承.抽象类.接口.多态等等概念搞不清的初学者.     2.本文的内容摘要:讲述Java中的一 ...

  4. 重新精读《Java 编程思想》系列之向上转型与向下转型

    前言 今天重读了一下向上转型与向下转型,有些新的体会,了解了向上转型的好处,及如何向下转型.在此分享给大家. 向上转型 向上转型是用来表现新类和基类之间的关系.在传统中,由导出类转型成基类,在继承图中 ...

  5. 第三次学JAVA再学不好就吃翔(part35)--多态向上转型和向下转型

    学习笔记,仅供参考 文章目录 面向对象 多态 多态向上转型和向下转型 多态的好处和弊端 面向对象 多态 多态向上转型和向下转型 我们首先通过以下代码复习一下自动类型提升和强制类型转换: class B ...

  6. Java转型(向上转型和向下转型)

    在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型. 5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就 ...

  7. [JAVA]向上转型与向下转型

    要理解多态性,首先要知道什么是"向上转型"."向下转型". 对象的多态性:父子类对象的转换 **向上转型:**子类对象变为父类对象,语法: 父类 父类对象 = ...

  8. java 对象向上转型_JAVA对象向上转型和向下转型

    今天做了一个测试的题目,发现自己还是很多问题没有静下心来做.很多问题是可以自己解决的但是自己一是没有读清题意,二是自己心里太急躁了.所以这个要自己应以为鉴! 对象的转型问题其实并不复杂,我们记住一句话 ...

  9. java 向下转型运行时错误_Java向上转型和向下转型

    首先定义父类Animal,所有动物都有一个吃东西的方法:子类Dog还增加了一个叫的功能. public classAnimal {public voideat() { System.out.print ...

最新文章

  1. 【爱上Java8】BigInteger在Java8中的改进
  2. 她琴棋书画全能,还进入清华计算机系实验室,被赞智商太超群、能力过强悍...
  3. Python标准库04 文件管理 (部分os包,shutil包)
  4. 3d数学基础学习总结
  5. FANUC常用CNC诊断数据表
  6. LintCode-落单的数 III
  7. 关于烂代码的那些事——什么是好代码
  8. linux进程通讯-纯文本文件
  9. win10安装opcenum_Win10提示Windows无法安装到GPT分区形式磁盘
  10. 29 Python - 字符与编码
  11. B1295 [SCOI2009]最长距离 最短路
  12. java取set中的元素个数_java中的Set的使用以及各种遍历方法(较为全面)
  13. [转] Java之ACM速成
  14. [高级操作系统课程] 各大名校 ppt,pdf 课件整理(course materials)
  15. 电脑出现未识别的网络,无Internet访问怎么办
  16. 爬取初试----猫眼电影,猫眼评分
  17. python模块化导入
  18. c语言编程运动会分数统计系统,东华大学数据结构设计C语言运动会分数统计系统...
  19. 安装Ubuntu 20.04后要做的几件事(换源,精简,定制)
  20. 最好的降噪蓝牙耳机有哪些?目前最好的降噪蓝牙耳机推荐

热门文章

  1. GOOGLE 真实地图模型和瓦片图下载
  2. JPEG图像格式Jphide隐写
  3. 【Java】棋盘覆盖问题
  4. Linux网络编程入门
  5. 怎么运用好ZBrush中Magnify膨胀笔刷
  6. Russian Dolls on the Christmas Tree
  7. java super父类的父类_java super关键字,super访问父类成员详解
  8. 基于FTP网盘系统设计
  9. 那些在2009年失意的互联网“伟人”
  10. VS2019社区版--WDK-win10-2004开发环境搭建