Menu
CoddyTech

实现接口

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

要使用一个接口,类必须使用 implements 关键字来实现它。然后,类会为接口中声明的所有方法提供具体实现:

public interface Drawable {
    void draw();
}

public class Circle implements Drawable {
    private double radius;
    
    public Circle(double radius) {
        this.radius = radius;
    }
    
    @Override
    public void draw() {
        System.out.println("Drawing a circle with radius " + radius);
    }
}

如果一个类实现了接口,却没有实现接口中的所有方法,编译器就会报错。@Override 注解是可选的,但建议使用,因为它有助于发现错误。

和抽象类一样,你可以将接口用作引用类型。这样就能实现多态,让实现同一接口的不同类可以统一处理:

Drawable shape1 = new Circle(5.0);
Drawable shape2 = new Rectangle(4.0, 3.0);

shape1.draw();  // 绘制半径为 5.0 的圆
shape2.draw();  // 绘制尺寸为 4.0 x 3.0 的矩形

这很强大,因为使用 Drawable 引用的代码不需要知道具体的类类型。它只关心对象是否可以绘制。

在下一课中,你将看到一个类如何同时实现多个接口。

challenge icon

挑战

简单

让我们构建一个扬声器系统,演示类如何实现接口。你将创建一个接口,用来定义任何扬声器都能做什么,然后创建两种不同类型的扬声器,让它们以各自的方式实现这个约定。

你将把代码分布在 4 个文件中:

  • Speaker.java:定义一个名为 Speaker 的接口,声明任何扬声器都必须能够做什么。每个扬声器都应有一个 speak() 方法,并返回一个 String。这是所有实现该接口的类都必须遵守的约定。
  • Human.java:创建一个实现 Speaker 接口的类。Human 有一个 name 字段(String)。添加一个构造函数来初始化名称,并实现 speak() 方法,使其返回:[name] says: Hello everyone!
  • Robot.java:再创建一个实现 Speaker 接口的类。Robot 有一个 model 字段(String)。添加一个构造函数来初始化型号,并实现 speak() 方法,使其返回:Robot [model] says: Beep boop!
  • Main.java:使用基于接口的多态把所有内容整合起来。你会收到两个输入:一个人的姓名和一个机器人的型号。创建一个 Human 和一个 Robot,然后将它们存入一个由 Speaker 引用组成的数组中。遍历数组,并打印对每个扬声器调用 speak() 的结果。

你会收到两个输入:人的姓名(String)和机器人的型号(String)。

输出应有两行,每个扬声器各一行。注意,虽然 Human 和 Robot 的说话方式完全不同,但通过 Speaker 接口,它们都可以用统一的方式处理!

亲手试试

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 读取输入
        String humanName = scanner.nextLine();
        String robotModel = scanner.nextLine();
        
        // TODO:用给定的名字创建一个 Human 对象
        
        // TODO:用给定的型号创建一个 Robot 对象
        
        // TODO:创建一个包含这两个对象的 Speaker 引用数组
        
        // TODO:遍历数组,打印每个 Speaker 对象调用 speak() 的结果
    }
}
quiz icon自我测试

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

面向对象编程中的所有课

自己练习: Java 在线编译器