博客
关于我
Java中为什么使用向上转型而不直接创建子类对象?
阅读量:323 次
发布时间:2019-03-04

本文共 1067 字,大约阅读时间需要 3 分钟。

定义父类 Animal,代码如下:

public class Animal {    public void sleep() {        System.out.println("小动物在睡觉");    }    public static void doSleep(Animal animal) {        // 向上转型,参数是父类引用,但实际传递子类对象        animal.sleep();    }    public static void main(String[] args) {        Animal animal = new Animal();        animal.doSleep(new Cat());        animal.doSleep(new Dog());    }}
public class Cat extends Animal {    @Override    public void sleep() {        System.out.println("猫正在睡觉");    }}
public class Dog extends Animal {    @Override    public void sleep() {        System.out.println("狗正在睡觉");    }}

如果不使用向上转型,则必须写两个 doSleep 方法,一个接收 Cat 类对象,一个接收 Dog 类对象。这会导致大量重复代码,特别是当有多个子类时,代码复杂度急剧增加。向上转型通过父类引用统一处理多个子类对象,充分体现了多态的优势,提升了程序的可扩展性和间接性。

关键点总结:

  • 向上转型:将子类对象直接赋值给父类引用,Java会自动向上转型。例如:

    Animal father = new Cat();
  • 向下转型:将父类引用转换为子类引用时,必须使用强制转换,并加上 instanceof 检查。例如:

    Cat son = (Cat) father;

    强制转换前,必须确保 father 指向的是 Cat 类对象。

  • 向上转型的限制:向上转型只能访问父类的属性和方法,无法直接访问子类特有的成员。尽管如此,子类可以通过重写父类方法来提供特定功能。

  • 向上转型的优势:通过父类引用统一处理多个子类,减少代码重复,体现了多态的优雅,提升了代码的可维护性和扩展性。

  • 在实际编码中,向上转型和向下转型各有适用场景,正确使用可以充分发挥多态的优势。

    转载地址:http://yglq.baihongyu.com/

    你可能感兴趣的文章
    OMG,此神器可一次定一周的外卖
    查看>>
    Omi 多端开发之 - omip 适配 h5 原理揭秘
    查看>>
    On Error GOTO的好处
    查看>>
    onclick事件的基本操作
    查看>>
    oncopy和onpaste
    查看>>
    onCreate中的savedInstanceState作用
    查看>>
    onCreate()方法中的参数Bundle savedInstanceState 的意义用法
    查看>>
    One good websit for c#
    查看>>
    One-Shot学习/一次学习(One-shot learning)
    查看>>
    OneASP 安全公开课,深圳站, Come Here, Feel Safe!
    查看>>
    OneBlog Shiro 反序列化漏洞复现
    查看>>
    oneM2M
    查看>>
    Oneplus5重装攻略
    查看>>
    one_day_one--mkdir
    查看>>
    ONI文件生成与读取
    查看>>
    Vue 项目中实现高效的消息提示与确认对话框功能(模版)
    查看>>
    Online PDF to PNG、JPEG、WEBP、 TXT - toolfk
    查看>>
    onlstm时间复杂度_CRF和LSTM 模型在序列标注上的优劣?
    查看>>
    onlyoffice新版5.1.2版解决中文汉字输入重复等问题
    查看>>
    onnx导出动态输入
    查看>>