在我们的日常中,上转型和下转型都使用的比较少,所以当别人问起来什么是上转型,什么是下转型,自己往往一片模糊,或者不能将他们进行明显的区分。

在这里,我将以我个人理解来论述上下转型,希望对大家有帮助,如有不足,请指出,我会将此及时纠正。

首先概念:

  • 向上转型

是指将基类(也叫父类)引用转换为导出类(也叫子类)引用的动作

问题
在向上转型的过程中,我们容易出现方法丢失的问题,比如我们将一个导出类(子类)进行向上转型,但是在基类(父类)中可能缺少部分导出类(子类)的方法,所以我们对导出类(子类)进行向上转型之后,使用基类(父类)对象去调用方法,只能调用基类(父类)有的方法。

  • 向下转型

这个就和向上转型相对应,但是有一点,向下转型必须是在已经向上转型的基础上进行

计算
在这里,如何理解向下转型呢?它就如同一个数学问题,我将用短代码呈现:

//假设A为基类,也就是父类,B为导出类,也就是子类
A a;
a=new B();//这是进行上转型
B b=(B)a;//这是进行下转型

在这里面就相当于对a加了两个负号,然后负负得正,所以最后进行下转型后,对象b能够调用B类的所有方法,类似于"B b=new B()"。

在最后,我们上转型也好,下转型也罢,其实实际输出都是输出导出类(子类)的内容,不同的是,调用的对象不同,还有就是上转型的对象对造成方法丢失的情况。

以下是测试代码:


class Animal{public void show(){System.out.println("这是基类,也叫子类!");}public void walk(){System.out.println("走或飞");}
}
class Dog extends Animal{public void show(){System.out.println("这是导出类,也叫子类!");}public void walk(){System.out.println("四只脚走!");}public void smile(){System.out.println("dog smile!");}
}public class Test {private static Object Dog;public static void main(String[] args){Animal animal=new Animal();Dog dog=new Dog();animal.show();dog.show();animal.walk();dog.walk();dog.smile();//这是将animal进行上转型animal=new Dog();//调用时写的虽然是基类(父类)方法,但是输出的是导出类(子类)重写后的值//对于我个人方便理解,我将它记为用基类(父类)调用导出类(子类)的方法animal.show();animal.walk();//((Dog) animal).smile();//下面进行下转型,下转型只能对经过上转型的对象进行下转型Dog dog_0=(Dog)animal;dog_0.walk();dog_0.show();dog_0.smile();}
}

输出结果如下所示:

这是基类,也叫子类!
这是导出类,也叫子类!
走或飞
四只脚走!
dog smile!
这是导出类,也叫子类!
四只脚走!
四只脚走!
这是导出类,也叫子类!
dog smile!

其类图如下所示:

在测试过程中,我为了大家观看方便,将所有类写在一起,但是在实际生活中,最好是每个类分开写,这样也方便自己的一个了解与维护。

Java 中的上转型和下转型相关推荐

  1. Java多态中的 向上转型/向下转型

     Java 向上转型和向下转型的详解 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法 ...

  2. Java从入门到放弃09---多态/向上转型/向下转型/多态内存图/抽象类/关键字abstract不能和哪些关键字共存/接口/类与类,类与接口,接口与接口的关系/抽象类与接口的区别

    Java从入门到放弃09-多态/向上转型/向下转型/多态内存图/抽象类/关键字abstract不能和哪些关键字共存/接口/类与类,类与接口,接口与接口的关系/抽象类与接口的区别 01 多态 多态指的是 ...

  3. Java中FTPClient上传中文目录、中文文件名乱码问题解决方法

    Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 参考文章: (1)Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 (2)https://www.cnblog ...

  4. Java中如何读取文件夹下的所有文件

    问题:Java中如何读取文件夹下的所有文件 Java里面是如何读取一个文件夹下的所有文件的? 回答一 public void listFilesForFolder(final File folder) ...

  5. java中为什么使用上转型和下转型

    为什么使用上转型?因为当一个父类有很多子类,子类都重写了父类的方法并加以使用.这时候,如果要在之前代码让你用其他子类来实现,就变得很简单,只需要把A a = new B();换成A a = new C ...

  6. java上转型与下转型,Java -- 上转型和下转型

    首先理解一句话:父类引用指向子类对象:什么意思呢? 记得在刚开始学习面向对象编程时候,经常听老师讲:如果要使用一个类中的成员,就需要先实例化对象,就是说要先创建一个引用类型的对象,就可以使用里边的内容 ...

  7. java 上转型对象_Java上转型和下转型对象

    版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创! 恰饭广告 上转型对象:子类创建对象 并将这个对象引用赋值给父类的对象. 语法格式:Father f=new Son(); 注 ...

  8. JAVA中多态以及向上转型向下转型、重写的讲解

    重写 重写(override):也称为覆盖.重写是子类对父类非静态.非private修饰,非final修饰,非构造方法等的实现过程 进行重新编写, 注意!!!返回值和形参都不能改变. 重写的好处在于子 ...

  9. Java接口,多态,向上转型,向下转型的意义

    接口 官方解释: Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现 ,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 包含 ...

最新文章

  1. Mac下添加Hibernate时报错Unsupported major.minor version
  2. uniapp中自定义返回和物理返回
  3. SQL Server中一个隐性的IO性能杀手-Forwarded record
  4. python numpy.linspace() 使用介绍
  5. LeetCode -- 204. Count Primes
  6. 小博老师解析Java核心技术 ——JSwing绘图技术
  7. PL/SQL经典练习
  8. 双11特刊|一站式在线数据管理平台DMS技术再升级,高效护航双11
  9. (第十二章)创建数据表索引
  10. 从孙子算经到中国剩余定理
  11. Bitmap存储入门
  12. ubuntu vmplayer安装vmtool
  13. c语言助手,C语言代码实例助手
  14. 系统测试包含哪几部分?
  15. 等额本息计算公式推导
  16. Axure 9软件功能区域、界面介绍
  17. vs商业智能项目的安装
  18. Eureka报错“EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ”
  19. 物联网方面的竞赛有那些?
  20. bzoj 4246: 两个人的星座 计算几何

热门文章

  1. 京东抢购茅台如何获取_JdTdudfp
  2. java mediator模式_Java Mediator Pattern(中介者模式)
  3. 对于软构课程oop一课的课堂笔记
  4. iis 设置了主机名 就不能访问
  5. 【彩彩只能变身队】用户需求分析(二)—— 调查结果
  6. 支付宝/飞行模式解决/已停止访问该网页
  7. MSF基础--info/show targets
  8. 【生活】小绿电车,慢着点儿
  9. 珍惜身边的亲人、朋友
  10. 解决Element type “http:“ must be followed by either attribute specifications, “>“ or “/>“.