我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java向上向下转型详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java向上向下转型详解

Java之所以可以向上向下转型是依据Java三大特性之一的多态性,而转型就是对象的多态性,需要注意的是转型的前提是方法覆写

转型:

[自动,90%] (1)对象的向上转型:父类 父类对象 = 子类实例

[强制,1%]   (2)对象的向下转型:子类 子类对象 = (子类) 父类实例

观察向上转型

package TestOverride;
 

 
class Person{
    public void print(){
        System.out.println("1.我是爸爸!");
    }
}
class Student extends Person{
    public void print(){
        System.out.println("2.我是儿子!");
    }
}
public class Test {
    public static void main(String[] args) {
        Person per = new Student();//向上转型
        per.print();
    }
}

运行结果:

2.我是儿子!
 
Process finished with exit code 0

运行结果只打印了子类print方法的内容,因为向上转型将子类对象变为父类对象,调用了子类的print方法

向下转型指的是将父类对象变为子类对象,但在这之前我们需要明确:为什么我们需要向下转型?当你需要子类扩
充操作的时候就要采用向下转型 

观察向下转型(存在安全隐患)

package TestOverride;
 

 
class Person{
    public void print(){
        System.out.println("1.我是爸爸!");
    }
}
class Student extends Person{
    public void print(){
        System.out.println("2.我是儿子!");
    }
    public void fun(){
        System.out.println("只有儿子有!");
    }
}
public class Test {
    public static void main(String[] args) {
        Person per = new Person();
        per.print();
        //这个时候父类能够调用的方法都是本类定义好的方法
        //所以并没有Student类中的fun()方法,那么只能够进行向下转型处理
        Student stu = (Student) per;
        stu.fun();
    }
}

并不是所有的父类对象都可以向下转型,如果要想进行向下操作之前,一定要首先发生向上转型,否则在转型时会出现 ClassCastException 。
观察错误转型

Person per = new Person(); //父类对象
Student stu = (Student) per; //强转

如果向下转型存在安全隐患,那么如何转型才靠谱呢?最好的做法就是先进行判断,而后在进行转型,那么就可以依instanceo关键字实现,该关键字语法如下:

子类对象 instanceof类,返回boolean类型

观察instanceof操作

Person per = new Student();
        System.out.println(per instanceof Person);
        System.out.println(per instanceof Student);
        if (per instanceof Student) { //避免ClassCastException
           Student stu = (Student) per ;
           stu.fun();
       }

这种转换到底有什么意义?

要求定义一个方法,这个方法可以接收Person类的所有子类实例,并调用Person类的方法。

package TestOverride;
 

 
class Person{
    public void print(){
        System.out.println("1.我是人类!");
    }
}
class Student extends Person{
    public void print(){
        System.out.println("2.我是学生!");
    }
}
class Worker extends Person{
    public void print(){
        System.out.println("3.我是工人!");
    }
}
public class Test {
    public static void main(String[] args) {
        whoAre(new Student());
        whoAre(new Worker());
    }
    public static void whoAre(Person per){
        per.print();
    }
}

通过以上分析就可以清楚,对象的向上转型有一个最为核心的用途:操作参数统一。

多态性总结:

  • 对象多态性的核心在于方法的覆写。
  • 通过对象的向上转型可以实现接收参数的统一,向下转型可以实现子类扩充方法的调用(一般不操作向下转型,有安全隐患)。
  • 两个没有关系的类对象是不能够进行转型的,一定会产生ClassCastException。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java向上向下转型详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java怎么正确的向上转型与向下转型

在Java中,向上转型和向下转型是用来处理父类与子类之间的关系的。向上转型:将一个子类的对象转换为父类的对象。这样可以实现父类引用指向子类对象,实现多态。向上转型是自动进行的,无需强制转换。class Animal {public void
Java怎么正确的向上转型与向下转型
2024-03-01

C++ 函数继承详解:什么是向上转型和向下转型?

继承中,向上转型将派生类转换为基类,向下转型将基类转换为派生类。向上转型安全,信息可能丢失;向下转型危险,须确保存在对应派生类,否则返回 nullptr。C++ 函数继承中的向上转型和向下转型在面向对象编程中,继承是类层次结构的关键概念。
C++ 函数继承详解:什么是向上转型和向下转型?
2024-04-30

java向上转型和向下转型的概念是什么

Java中的向上转型(Upcasting)和向下转型(Downcasting)是指对象在继承关系中的类型转换。向上转型是指将子类对象转换为父类类型。这是一个隐式的转换过程,不需要进行任何特殊的操作,编译器会自动进行类型转换。向上转型的目的是
2023-09-14

Java中向上转型与向下转型的区别有什么

Java中向上转型与向下转型的区别有什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 Java 向上转型和向下转型的详解转型是在继承的基础上而言的,继承是面向对象语言中,代码
2023-05-31

学习Java之如何正确地向上转型与向下转型

面向对象的第三个特征是多态,实现多态有三个必要条件:继承、方法重写和向上转型,在学习多态之前,我们还要先学习Java的类型转换,本篇文章就来带大家认识什么是类型转换,看看类型转换都有哪几种情况,以及如何避免类型转换时出现异常
2023-05-19

java多态向下转型怎么实现

Java中实现向下转型的方式是使用强制类型转换符((子类类型) 父类对象),将父类对象转换为子类类型。例如,有一个父类Animal和子类Dog:public class Animal {public void eat() {System
2023-10-24

java向下转型指的是什么意思

这篇文章将为大家详细讲解有关java向下转型指的是什么意思,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、概念向下转型就是父类对象转成子类对象。我们把一个父类引用 Animal类型的引用 给了一个 Bi
2023-06-15

java中向上转型发生的示例代码

这篇文章主要介绍java中向上转型发生的示例代码,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、直接赋值public static void main(String[] args) { //父类引用
2023-06-15

java中多态的向上转型是什么意思

今天就跟大家聊聊有关java中多态的向上转型是什么意思,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、说明向上转型就是把一个子类引用给一个父类引用,也就是父类引用 引用了子类的对象
2023-06-15

Java中堆的向下和向上调整示例分析

这篇文章主要介绍Java中堆的向下和向上调整示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、关于堆JDK1.8中的PriortyQueue(优先级队列)底层使用了堆的数据结构,而堆实际就是在完全二叉树的基础
2023-06-25

详解Java的面向对象和面向过程

我们知道,Java是面向对象的编程语言,但是至今仍有不少同学还不太懂”面向对象“的确切含义,今天这篇文章就带大家真正地认识面向对象,感兴趣的同学可以跟着小编一起来学习
2023-05-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录