Menu
CoddyTech

接口简介

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

你已经了解了抽象类如何定义子类必须遵循的契约。但如果你想让一个类遵循多个契约,该怎么办?Java 不允许一个类继承多个类,但它通过接口解决了这个问题。

接口是一种契约,它定义了一个类能做什么,但不指定它如何实现。与抽象类不同,接口默认只包含方法签名,不包含实现:

public interface Drawable {
    void draw();
}

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

把接口看作一种承诺。当一个类实现接口时,它承诺为该接口中声明的所有方法提供实现。接口定义了能力,而类提供了行为。

接口使用 interface 关键字声明,而不是使用 class。接口中的所有方法都隐式为 public 和 abstract,因此你不需要写出这些关键字:

public interface Playable {
    void play();    // 隐式声明为 public abstract
    void pause();
    void stop();
}

接口也可以声明常量,这些常量会隐式地成为 public static final:

public interface GameConstants {
    int MAX_PLAYERS = 4;  // 隐式声明为 public static final
}

在下一课中,你将学习类如何使用 implements 关键字来实现接口。

challenge icon

挑战

简单

让我们通过定义接口来构建一个设备控制系统,描述不同设备可以执行哪些操作。本挑战重点是创建接口:接口是定义功能但不指定其工作方式的契约。

你要将代码分布在三个文件中:

  • Switchable.java:创建一个接口,定义设备可切换的含义。任何可切换的设备都应该能够开启和关闭。声明两个方法:turnOn() 和 turnOff()。请记住,接口方法会隐式地成为 public 和 abstract,因此你只需要编写方法签名。
  • Adjustable.java:再创建一个接口,定义设备可调节的含义。可调节的设备应该能够设置其级别。声明一个方法 setLevel(int level)。另外,添加一个值为 100 的常量 MAX_LEVEL:请记住,接口中的常量会隐式地成为 public static final。
  • Main.java:通过打印接口相关信息,展示你的接口定义正确。你会收到一个输入:级别值(int)。打印以下三行:
    • Switchable methods: turnOn, turnOff
    • Adjustable methods: setLevel
    • Max level constant: [MAX_LEVEL value](从 Adjustable 接口访问该常量)
    然后打印:Setting level to: [input level]

你会收到一个输入:级别值(int)。

本挑战只关注接口的定义:接口是描述功能的蓝图。在下一课中,你将学习类如何实际实现这些接口,从而提供真正的行为!

亲手试试

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int level = scanner.nextInt();
        
        // TODO:输出有关接口的信息
        // 输出:"Switchable methods: turnOn, turnOff"
        // 输出:"Adjustable methods: setLevel"
        // 输出:"Max level constant: ",后面接 Adjustable.MAX_LEVEL
        // 输出:"Setting level to: ",后面接输入的 level
        
    }
}
quiz icon自我测试

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

面向对象编程中的所有课

自己练习: Java 在线编译器