Menu
CoddyTech

基础继承(extends)

本课属于 Coddy Java 学习旅程的“面向对象编程”单元。第 20 课,共 87 课。

继承是 OOP 的核心支柱之一。它允许一个类获得另一个类的属性和方法,从而促进代码复用,并在类之间建立自然的层级关系。

在 Java 中,你可以使用 extends 关键字创建继承关系。继承的类称为子类(或子类),被继承的类称为超类(或父类)。

public class Animal {
    private String name;
    
    public Animal(String name) {
        this.name = name;
    }
    
    public void eat() {
        System.out.println(name + " is eating");
    }
    
    public String getName() {
        return name;
    }
}

public class Dog extends Animal {
    public Dog(String name) {
        super(name);  // 调用父类构造方法
    }
    
    public void bark() {
        System.out.println(getName() + " says woof!");
    }
}

Dog 类会自动继承 Animal 的 eat() 方法和 getName() 方法。它也可以定义自己的方法,例如 bark():

Dog myDog = new Dog("Buddy");
myDog.eat();   // 继承的方法:“Buddy is eating”
myDog.bark();  // 自身的方法:“Buddy says woof!”

可以把继承看作一种“是一个”的关系。Dog 是一个 Animal,因此让 Dog 继承 Animal 是合理的。这种关系让你可以构建共享通用功能、同时添加各自独特行为的专用类。

challenge icon

挑战

简单

让我们构建一个简单的车辆系统,演示继承的实际效果。你将创建一个保存车辆共有属性的父类,以及一个通过扩展父类来实现专属行为的子类。

你将把代码分成三个文件:

  • Vehicle.java:创建一个表示任意车辆的父类。它应该包含:
    • 一个用于保存车辆 brand(String)的私有字段
    • 一个接收品牌名称并将其赋给该字段的构造函数。(这里不需要调用 super(),因为 Vehicle 位于继承层级的顶端。)
    • 一个返回品牌的 getBrand() 方法
    • 一个输出 [brand] is starting 的 start() 方法
  • Motorcycle.java:创建一个扩展 Vehicle 的子类。摩托车是一种车辆,所以这种“is-a”关系适合使用继承。你的 Motorcycle 应该:
    • 使用 extends 继承 Vehicle
    • 包含一个接收品牌并通过 super(brand) 将其传给父类的构造函数
    • 添加自己的 wheelie() 方法,输出 [brand] is doing a wheelie!
  • Main.java:创建一个 Motorcycle 对象,并演示继承而来的行为和独有行为,将所有内容整合起来。你会收到一个输入:品牌名称。调用以下方法,输出两行:
    • 继承而来的 start() 方法
    • Motorcycle 自己的 wheelie() 方法

你会收到一个输入:摩托车的品牌名称(String)。

注意,Motorcycle 无需重写 start() 和 getBrand(),就能自动使用它们。这就是继承的强大之处!

亲手试试

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String brand = scanner.nextLine();
        
        // TODO: 用 brand 创建一个 Motorcycle 对象
        
        // TODO: 调用继承的 start() 方法
        
        // TODO: 调用 wheelie() 方法
    }
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: Java 在线编译器