一、接口的概念
接口使用interface关键字定义,它是一种行为规范 / 能力标准,主要用来规定 “某类事物必须具备哪些行为”。
public interface 接口名 { }接口可以理解为:
- 制定规则;
- 定义能力;
- 不关心具体实现,只关心 “能不能做”。
二、接口的基本定义
public interface Flyable { // 抽象方法:规定“能飞” void fly(); }在 Java 8 以后,接口中可以包含:
- 抽象方法;
- 默认方法
default; - 静态方法
static; - 私有方法
private。
但初学阶段,先掌握最核心的:抽象方法 + 类实现接口。
三、类实现接口
类通过implements关键字实现接口,并必须实现接口中的所有抽象方法。
public class Bird implements Flyable { @Override public void fly() { System.out.println("鸟扇动翅膀飞翔"); } }完整示例
public interface Flyable { void fly(); }public class Bird implements Flyable { @Override public void fly() { System.out.println("鸟扇动翅膀飞翔"); } }public class Plane implements Flyable { @Override public void fly() { System.out.println("飞机依靠发动机飞行"); } }public class TestFly { public static void main(String[] args) { Flyable f1 = new Bird(); Flyable f2 = new Plane(); f1.fly(); f2.fly(); } }输出:
鸟扇动翅膀飞翔 飞机依靠发动机飞行四、接口的特点
| 特点 | 说明 |
|---|---|
| 接口不是类 | 使用interface定义 |
| 接口不能创建对象 | 不能new 接口名() |
接口中的方法默认是public abstract | 可以不写,但编译后仍然是公共抽象方法 |
接口中的变量默认是public static final | 必须赋值,且不能修改 |
| 类实现接口 | 使用implements |
| 实现类必须实现全部抽象方法 | 除非是抽象类 |
| 一个类可以实现多个接口 | implements A, B, C |
五、接口中的常量
接口中可以定义常量,格式:
public static final 类型 常量名 = 值;例如:
public interface Constants { int MAX_COUNT = 100; String NAME = "Java"; }接口里的变量会被自动看作:
public static final所以必须定义时赋值,并且不能修改。
六、接口与抽象类的区别
| 对比项 | 抽象类 | 接口 |
|---|---|---|
| 定义方式 | abstract class | interface |
| 构造方法 | 有 | 没有 |
| 成员变量 | 普通成员变量 | 主要是常量 |
| 方法 | 抽象方法、普通方法 | 抽象方法、默认方法、静态方法等 |
| 关系 | 继承关系:extends | 实现关系:implements |
| 单继承 / 多实现 | 类只能单继承 | 类可以多实现 |
| 作用 | 共性模板 + 部分实现 | 行为规范、能力标准 |
七、接口的多实现
一个类可以同时实现多个接口,这是接口最重要的优势之一。
public interface Flyable { void fly(); }public interface Swimmable { void swim(); }public class Duck implements Flyable, Swimmable { @Override public void fly() { System.out.println("鸭子飞起来"); } @Override public void swim() { System.out.println("鸭子游泳"); } }public class TestDuck { public static void main(String[] args) { Duck duck = new Duck(); duck.fly(); duck.swim(); } }八、接口的继承
接口也可以继承接口,并且支持多继承。
public interface Flyable { void fly(); }public interface Attackable extends Flyable { void attack(); }public class Bird implements Attackable { @Override public void fly() { System.out.println("鸟飞"); } @Override public void attack() { System.out.println("鸟攻击"); } }九、面向接口编程
面向接口编程的核心思想是:面向接口调用,不关心具体实现。
例如:
public interface USB { void work(); }public class Mouse implements USB { @Override public void work() { System.out.println("鼠标工作"); } }public class Keyboard implements USB { @Override public void work() { System.out.println("键盘工作"); } }public class Computer { public void useUSB(USB usb) { usb.work(); } }public class TestComputer { public static void main(String[] args) { Computer computer = new Computer(); computer.useUSB(new Mouse()); computer.useUSB(new Keyboard()); } }这里Computer不关心传入的是鼠标还是键盘,只关心它是否符合USB接口规范。
十、本章小结
- 接口:使用
interface定义,是行为规范和能力标准。 - 抽象方法:接口中主要定义要实现的行为。
- 类实现接口:使用
implements,必须实现全部抽象方法。 - 多实现:一个类可以实现多个接口。
- 面向接口编程:面向接口调用,降低耦合,提高扩展能力。