Java怎么正确地向上转型和向下转型

在Java中,向上转型是指将一个子类对象赋值给一个父类引用变量,向下转型是指将一个父类引用变量强制转换为其子类对象。向上转型示例:class Animal {public void sound() {System.out.println(“Animal makes sound”);}}class Dog extends Animal {public void sound() {System.

在Java中,向上转型是指将一个子类对象赋值给一个父类引用变量,向下转型是指将一个父类引用变量强制转换为其子类对象。

向上转型示例:

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

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

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog(); // 创建子类对象
        Animal animal = dog; // 向上转型,将子类对象赋值给父类引用变量
        animal.sound(); // 调用父类引用变量的方法会执行子类的方法
    }
}

输出结果为:

Dog barks

向下转型示例:

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

class Dog extends Animal {
    public void sound() {
        System.out.println("Dog barks");
    }
    
    public void fetch() {
        System.out.println("Dog fetches");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Dog(); // 创建父类引用变量指向子类对象
        Dog dog = (Dog) animal; // 向下转型,强制将父类引用变量转换为子类对象
        
        dog.fetch(); // 调用子类对象的方法
    }
}

输出结果为:

Dog fetches

需要注意的是,向下转型存在风险,如果父类引用变量指向的实际对象不是转型后的类型,会导致运行时异常。因此,在进行向下转型时,最好先使用instanceof运算符来判断引用变量是否可以转型为目标类型,以避免运行时异常的发生。

if (animal instanceof Dog) {
    Dog dog = (Dog) animal;
    dog.fetch();
} else {
    System.out.println("Cannot downcast to Dog");
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/839242.html

(0)
派派
上一篇 2024-01-26
下一篇 2024-01-26

相关推荐

  • python安装wordcloud库失败怎么解决

    在安装wordcloud库时失败,通常有以下几种解决方法:确保你的Python版本是3.6或以上,因为wordcloud库只支持Python 3.6及以上版本。检查你的pip版本是否是最新的,可以通过运行以下命令升级pip:pip install –upgrade pip尝试使用以下命令重新安装wordcloud库:pip install wordcloud如果你在安装过程中遇到了依赖问题,可以

    2024-02-18
    0
  • 如何使用outlook邮箱(outlook2010邮箱怎么用)

    如何使用outlook邮箱,outlook2010邮箱怎么用内容导航:电脑如何使用outlook邮箱outlook怎么用啊怎么使用outlook邮箱回复邮outlook怎么使用一、电脑如何使用outlook邮箱如何开启并使用o

    2022-04-29
    0
  • 网络广告的概念是什么(通常网络广告是什么)

    网络广告的概念是什么,通常网络广告是什么内容导航:简述网络广告的定义广告设计的概念是什么网络广告是什么网络广告是什么呢一、简述网络广告的定义网络广告的定义:通过网络广告平台在网络上投放广告。利用网站的广告横幅、文本链接、多媒体的方互联网刊登或发布广告,通过网络传递到互联网用户的一种高科技广告运作方式。其中网络广告包含:广告媒体、广告费用、广告信息、广告煤众。网络广告就是

    2022-04-26
    0
  • 为什么网站需要定期更新

    提升用户体验:定期更新网站可以增加新的内容和功能,使用户在访问网站时获得新的体验,增加用户的粘性和活跃度。提升搜索引擎排名:搜索引擎对网站的更新频率也有一定要求,定期更新网站可以提升网站的被搜索引擎收录的频率和排名。保持竞争力:互联网是一个竞争激烈的环境,定期更新网站可以使网站保持竞争力,吸引更多的访问量。改进网站性能:更新网站可以修复一些bug和问题,改进网站的性能和稳定性,提升用户的体验。提升

    2024-04-17
    0
  • linux的chown命令有什么特点和作用

    chown命令用于改变文件或目录的所有者和所属组。其特点和作用如下:修改文件或目录的所有者和所属组:chown命令可以将文件或目录的所有者和所属组修改为指定的用户和组。提高系统安全性:通过修改文件或目录的所有者和所属组,可以提高系统的安全性,限制不同用户对文件的访问权限。递归操作:chown命令可以递归地修改目录及其子目录下的所有文件和目录的所有者和所属组。支持符号链接:chown命令可以通过-h

    2024-03-08
    0
  • 怎么用array_shift()对PHP数组进行头尾操作

    array_shift()函数用于删除数组中的第一个元素,并返回被删除的元素的值。如果想要对数组进行头尾操作,可以结合array_shift()和array_pop()函数来实现。示例代码如下:$fruits = array(“apple”, “banana”, “orange”, “grape”);// 删除数组中的第一个元素$firstFruit = array_shift($frui

    2024-04-03
    0

发表回复

登录后才能评论