博客
关于我
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/

    你可能感兴趣的文章
    onCreate()方法中的参数Bundle savedInstanceState 的意义用法
    查看>>
    one_day_one--mkdir
    查看>>
    ONI文件生成与读取
    查看>>
    oobbs开发手记
    查看>>
    OpenCV 中的图像转换
    查看>>
    opencv&Python——多种边缘检测
    查看>>
    OpenCV-Python接口、cv和cv2的性能比较
    查看>>
    opencv26-模板匹配
    查看>>
    opencv32-基于距离变换和分水岭的图像分割
    查看>>
    opencv4-图像操作
    查看>>
    opencv5-图像混合
    查看>>
    opencv9-膨胀和腐蚀
    查看>>
    OpenCV与AI深度学习 | YOLO11介绍及五大任务推理演示(目标检测,图像分割,图像分类,姿态检测,带方向目标检测)
    查看>>
    OpenCV与AI深度学习 | 使用Python和OpenCV实现火焰检测(附源码)
    查看>>
    OpenCV与AI深度学习 | 使用YOLO11实现区域内目标跟踪
    查看>>
    OpenCV与AI深度学习 | 使用YOLOv8做目标检测、实例分割和图像分类(包含实例操作代码)
    查看>>
    OpenCV与AI深度学习 | 基于GAN的零缺陷样本产品表面缺陷检测
    查看>>
    OpenCV与AI深度学习 | 基于OpenCV和深度学习预测年龄和性别
    查看>>
    OpenCV与AI深度学习 | 基于Python和OpenCV将图像转为ASCII艺术效果
    查看>>
    OpenCV与AI深度学习 | 基于PyTorch实现Faster RCNN目标检测
    查看>>