Java:什么是向上转型与向下转型(详细图解)

这篇具有很好参考价值的文章主要介绍了Java:什么是向上转型与向下转型(详细图解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、什么是向上转型

1、概念

2、代码示例

3、向上转型的优缺点

二、什么是向下转型

1、向下转型的概念

​编辑

2、代码示例

三、向下转型的缺点及 instanceof 的使用

1、向下转型的缺点

2、instanceof的使用


一、什么是向上转型

1、概念

向上转型就是创建一个子类对象,将其当成父类对象来使用

语法格式:父类类型  对象名  =  new  子类类型()

                     Animal   animal  =  new Cat ();

Animal 是父类类型,但可以引用 Cat这个子类类型,因为是从小范围到大范围的转换。

java向上转型代码,Java,java,开发语言,算法,学习,数据结构

2、代码示例

class Aminal {
    public void display() {
        System.out.println("Animal");
    }
}
class Cat extends Aminal {
    public void display() {
        System.out.println("Cat");
    }
}
class Dog extends Aminal {

}

public class Main{
    public static void main(String[] args) {
        Aminal aminal1 = new Aminal();
        Aminal aminal2 = new Cat();
        Aminal aminal3 = new Dog();

        aminal1.display();
        aminal2.display();
        aminal3.display();
    }
}

java向上转型代码,Java,java,开发语言,算法,学习,数据结构

animal2中,Cat类 重写了 display方法,所以在实现时,打印的是Cat类中实现的内容。

animal3中,Dog类 没有重写 display方法,所以打印的还是父类中的内容。

由此我们可以得出:向上转型实现时

                                先看子类有没有

                                若是子类找不到

                                再看父类有没有

                                二者都无则报错!

3、向上转型的优缺点

优点:让代码实现更简单灵活

缺点:不能调用到子类特有的方法

例如:

class Animal {
    public void display() {
        System.out.println("Animal");
    }
}

class Dog extends Animal {
    public void display() {
        System.out.println("dog");
    }

    public void eat() {
        System.out.println("吃骨头");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Dog();

        animal.display();
        animal.eat(); //会报错
    }
}

所以,向上转型无法调用子类特有的方法!

java向上转型代码,Java,java,开发语言,算法,学习,数据结构

二、什么是向下转型

1、向下转型的概念

将一个子类对象向上转型之后可以当成父类对象使用,若需要调用子类特有的方法,则需要将父类对象再还原为子类对象。这就称作向下转型。

java向上转型代码,Java,java,开发语言,算法,学习,数据结构

2、代码示例

class Animal {
    public void display() {
        System.out.println("Animal");
    }
}

class Dog extends Animal {
    public void display() {
        System.out.println("dog");
    }

    public void eat() {
        System.out.println("吃骨头");
    }
}

public class Main{
    public static void main(String[] args) {
        //向上转型
        Animal animal = new Dog();
        animal.display();
        
        //向下转型
        //Animal类中原本没有 eat方法,在向下转型之前如果调用eat方法会报错
        //向下转型为子类Dog类后,就可以调用子类中特有的方法,而不会报错
        animal = (Dog)animal;
        ((Dog) animal).eat();
    }
}

运行结果:

java向上转型代码,Java,java,开发语言,算法,学习,数据结构

三、向下转型的缺点及 instanceof 的使用

1、向下转型的缺点

缺点:向下转型使用的比较少,而且不安全。如果转换失败,运行时就会抛异常。

2、instanceof的使用

Java中为了提高向下转型的安全性,引入了instanceof。如果表达式为 true,则可以安全转换。

使用实例:

class Animal {
    public void display() {
        System.out.println("Animal");
    }
}

class Dog extends Animal {
    public void display() {
        System.out.println("dog");
    }

    public void eat() {
        System.out.println("吃骨头");
    }
}
public class Main {
    public static void main(String[] args) {
        //向上转型
        Animal animal = new Dog();
        
        //判断instanceof 是否为 true
        if(animal instanceof Dog) {
            //向下转型
            animal = (Dog)animal;
            ((Dog) animal).eat();
        } else {
            System.out.println("Animal无法向下转型为Dog");
        }
    }
}

 以上就是 Java:什么是向上转型与向下转型(详细图解)的全部内容了,希望能对您有所帮助!

您的点赞与收藏就是对我最大的支持!文章来源地址https://www.toymoban.com/news/detail-842790.html

到了这里,关于Java:什么是向上转型与向下转型(详细图解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 通胀向下,价格向上

    号外: 教链内参2.10《内参:BTC真的存在春节模式吗?》 9号,美国劳工统计局BLS对1月份发布的2023年12月份通胀月环比数据进行了修订,下修了0.1%,从0.3%下调为0.2%。更骚气的是,还把前值也就是11月的数据给上修了0.1%,从0.1%上调为0.2%。 这样一来,通胀数据就从稳步上升变

    2024年02月22日
    浏览(40)
  • 小雉配置--支持向上向下兼容的 配置文件 兼容性 设计

          软件的开发离不开配置,传统的软件设计包括前端、后台和数据库3部分,三者是密切配合的统一整体,在实际项目中往往遇到以下问题: 因项目需求不明而增加、修改、删除参数导致配置结构调整后难以同已有数据兼容; 后台参数修改后,前端需要同步修改,无法

    2023年04月18日
    浏览(53)
  • hive向上取整、向下取整、保留小数位的函数

    1.向上取整函数 ceiling() 示例:select ceiling(10.1) 结果:11 2.向下取整函数 floor() 示例:select floor(10.9) 结果:10 3.四舍五入保留指定小数位 round(a,b) ,a参数是需要处理的数据,b参数是需要保留的小数位 示例:select round(10.562,1) 结果:10.6

    2024年02月16日
    浏览(47)
  • C++的向上转型

    在 C/C++ 中经常会发生数据类型的转换,例如将 int 类型的数据赋值给 float 类型的变量时,编译器会先把 int 类型的数据转换为 float 类型再赋值;反过来,float 类型的数据在经过类型转换后也可以赋值给 int 类型的变量。 数据类型转换的前提是,编译器知道如何对数据进行取舍

    2024年02月09日
    浏览(39)
  • C++ 多态向上转型详解

    【极客技术传送门】 : https://blog.csdn.net/Engineer_LU/article/details/135149485 此篇博文详解C++的多态向上转型 平台 : Qt 【Q】什么是多态? 【A】解释如下 : 通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。在编程语言和类型论中,多态指

    2024年02月03日
    浏览(55)
  • 【数据结构】堆的实现(向下调整和向上调整法)和堆排序的实现

    目录 一、堆的概念引入 二、小堆的实现 ①、堆的初始化--HeapInit ②、小堆的向下调整法的实现 ③、堆排序的实现  ④、堆的插入和向上调整法  ⑤、删除堆顶数据 ⑥、获取堆顶 三、时间复杂度总结: 注:本文logN表示以2为底N的对数 普通的二叉树不适合用数组来存储的,因

    2024年02月03日
    浏览(38)
  • 【数据结构】长篇详解堆,堆的向上/向下调整算法,堆排序及TopK问题

    堆就是将一组数据所有元素按完全二叉树的顺序存储方式存储在一个 一维数组 中,并满足树中 每一个父亲节点都要大于其子节点 称为 大堆 (树中 每一个父亲节点都要大于其子节点 称为 小堆 )。 性质 ①对于大堆(大根堆)来说,堆的顶部也就是数组首元素一定是最大的元素 ②

    2024年02月07日
    浏览(42)
  • (九)Java算法:快速排序(详细图解)

    1.1、概念    快速排序 :用数组的第一个数作为基准数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生

    2024年02月10日
    浏览(52)
  • 【数据结构】堆:堆的构建,堆的向上调整算法,堆的向下调整算法、堆排序

    目录 一、堆的定义 1、堆的定义: 2、根节点与其左、右孩子间的联系   二、堆的创建 1、堆的向下调整算法  2、堆的向上调整算法  三、堆排序 1、堆的定义: 堆可以被看作是 一棵 完全二叉树 的 数组 对象 。即在 存储结构上是数组,在逻辑结构上是一棵完全二叉树 。在

    2024年01月22日
    浏览(43)
  • 如何在Java中调用DLL:详细图解

    如何在Java中调用DLL:详细图解 在Java开发中,有时候需要与动态链接库(DLL)进行交互,以实现更高级的功能。本文将详细介绍如何使用Java调用DLL,并提供相应的代码和描述。 第一步:准备DLL文件 首先,确保你已经获得了需要调用的DLL文件。DLL文件通常由其他编程语言编写

    2024年02月03日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包