Java中父类引用指向子类对象

场景描述

假设一下,现在眼前有各种各样的玩具,比如玩偶,奥特曼,巴士、飞机、轮船等。为了方便管理和展示,你决定把这些玩具按照类别进行分类,比如将交通工具都放置在一个箱子里。

现在,让我们把这个场景翻译成 Java 的术语:

  • 父类Vehicle就像是你用来装玩具的大箱子,它代表了一类玩具共同的特性,比如都有颜色、大小等。
  • 子类Bus, Plane, Boat等这些是具体的玩具种类,它们都继承了“Vehicle”这个大类别的特性,但每种玩具都有自己独特的特点,比如巴士可以在地面行驶,飞机可以在天空中飞,轮船可以在水面上行驶。

如何使用

  • 创建子类对象:你可以在放置一辆具体的玩具汽车。
  • 使用父类引用:你拿着一个写着“Vehicle”的标签,指向那辆玩具汽车。这个标签可以指向任何一种交通工具玩具,不管是汽车还是飞机。
  • 多态性:当你通过标签(父类引用)与玩具互动时,比如让玩具移动,实际上发生的事情取决于你指向的具体玩具。如果是汽车,它就会在地上行驶;如果是飞机,它就会在空中飞。

为什么可以这样做

  • 继承关系:就像所有的交通工具玩具都属于“Vehicle”这个大类别一样,所有的子类都是父类的一种特定形式。这意味着子类自动拥有了父类的所有属性和方法。
  • 兼容性:因为子类继承了父类,所以父类引用可以安全地指向子类对象。就像“Vehicle”标签可以指向任何交通工具玩具一样,父类引用可以指向任何子类对象。
  • 方法重写:子类可以重写父类的方法,这样当通过父类引用调用这些方法时,实际执行的是子类中定义的行为。这就好比你通过“Vehicle”标签让玩具移动,但具体怎么动取决于玩具本身的特性。

示例代码

// 父类 Vehicle
class Vehicle {
    void move() {
        System.out.println("交通工具在移动!");
    }
}

// 子类 Bus
class Bus extends Vehicle {
    @Override
    void move() {
        System.out.println("巴士在公里上行驶!");
    }
}

// 子类 Plane
class Plane extends Vehicle {
    @Override
    void move() {
        System.out.println("飞机在天空中飞行!");
    }
}

// 主程序
public class Main {
    public static void main(String[] args) {
        // 创建子类对象
        Bus bus = new Bus();
        Plane plane = new Plane();
        // 使用父类引用指向子类对象
        Vehicle myBus = bus;  // 指向 bus 对象
        Vehicle myPlane = plane; // 指向 plane 对象
        // 通过父类引用调用方法
        myBus.move();   // 输出 "巴士在公里上行驶!"
        myPlane.move(); // 输出 "飞机在天空中飞行!"
    }
}

在上述个例子中

  • Vehicle 是一个基类,Bus 和 Plane 都继承了 Vehicle 。
  • Bus 和 Plane 分别重写了 move() 方法。
  • 在 main 方法中,myBus 和 myPlane 都是指向子类对象的父类引用。
  • 当调用 move() 方法时,实际执行的方法取决于对象的实际类型,这就是多态。多态的好处在于它可以提高代码的复用性和灵活性。例如,在 move() 方法中,你可以返回任何类型的 Vehicle 子类对象,并且调用者不需要知道具体返回的是哪种交通工具。这种灵活性使得代码更容易维护和扩展。

相关知识

Java中的多态是一种面向对象编程的概念,它允许子类对象被当作父类对象来使用,从而使得程序更加灵活和可扩展。多态的存在基于三个前提条件

  • 继承:必须存在继承关系,即一个类(子类)继承另一个类(父类)。
  • 方法重写:子类重写了父类的方法。
  • 向上转型:父类引用指向子类对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四两一钱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值