Menu
CoddyTech

实现多个接口

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

与类继承不同,类继承只能扩展一个类,而 Java 允许一个类实现多个接口。这就是 Java 如何安全地实现某种形式的多重继承。

要实现多个接口,请在 implements 关键字后列出它们,并用逗号分隔:

public interface Drawable {
    void draw();
}

public interface Resizable {
    void resize(int width, int height);
}

public class Rectangle implements Drawable, Resizable {
    private int width, height;
    
    public Rectangle(int width, int height) {
        this.width = width;
        this.height = height;
    }
    
    @Override
    public void draw() {
        System.out.println("Drawing rectangle " + width + "x" + height);
    }
    
    @Override
    public void resize(int width, int height) {
        this.width = width;
        this.height = height;
    }
}

这个类必须实现它声明的每个接口中的所有方法。你也可以将继承与多个接口结合使用:

public class Square extends Shape implements Drawable, Resizable {
    // 必须实现两个接口中的方法
    // 还可以使用从 Shape 继承的成员
}

这种灵活性让你可以设计出能够承担多种角色的类。SmartPhone 可以实现 Callable、Messageable 和 Browsable 接口,每个接口都定义了手机支持的不同功能。

challenge icon

挑战

简单

我们来构建一个智能设备系统,让设备可以具备多种功能。你将创建一个 SmartTV,它既可以开机和关机,也可以调节音量:这将展示一个类如何实现多个接口,以承担不同的角色。

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

  • Powerable.java:为可以开关机的设备定义一个接口。该接口应声明两个方法:powerOn() 和 powerOff(),两者的返回类型都是 void。
  • VolumeControl.java:为可以控制音量的设备定义一个接口。该接口应声明一个返回类型为 void 的方法 setVolume(int level),以及一个返回类型为 int 的方法 getVolume()。
  • SmartTV.java:创建一个同时实现 Powerable 和 VolumeControl 接口的类。你的 SmartTV 应有一个 brand 字段(String)、一个 isOn 字段(boolean,初始值为 false)和一个 volume 字段(int,初始值为 0)。添加一个接收品牌名称的构造函数。实现所有必需的方法:
    • powerOn() 应将 isOn 设为 true,并打印:[brand] TV is now ON
    • powerOff() 应将 isOn 设为 false,并打印:[brand] TV is now OFF
    • setVolume(int level) 应更新音量,并打印:[brand] TV volume set to [level]
    • getVolume() 应返回当前音量
  • Main.java:把所有内容组合起来,演示如何实现多个接口。你会收到两个输入:品牌名称(String)和音量级别(int)。使用给定的品牌创建一个 SmartTV,然后:
    • 调用 powerOn()
    • 调用 setVolume(),并传入给定的音量级别
    • 使用 getVolume() 打印:Current volume: [volume]
    • 调用 powerOff()

你会收到两个输入:电视品牌(String)和音量级别(int)。

你的输出应包含 4 行,展示 SmartTV 如何满足两个接口的约定。它可以像任何实现 Powerable 的设备一样开关机,也可以像任何实现 VolumeControl 的设备一样调节音量!

亲手试试

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 读取输入
        String brand = scanner.nextLine();
        int volumeLevel = scanner.nextInt();
        
        // TODO:使用给定的品牌创建一个 SmartTV 对象
        
        // TODO:调用 powerOn()
        
        // TODO:用给定的音量级别调用 setVolume()
        
        // TODO:使用 getVolume() 输出:Current volume: [volume]
        
        // TODO:调用 powerOff()
        
    }
}
quiz icon自我测试

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

面向对象编程中的所有课

自己练习: Java 在线编译器