好的阿杰 👍
我给你写一份通俗易懂的 Java 接口(interface)详解,从基础概念到进阶特性,一步步讲清楚。
🟦 Java 接口(interface)详解
1️⃣ 什么是接口?
- 接口(
interface
)是 一种规范,规定了类需要实现的方法,但不包含具体实现(直到 Java 8 之前)。 - 类比现实:接口就像合同,实现接口的类就必须履行合同中的“条款”。
👉 接口的主要作用:
- 定义规则,统一标准。
- 支持多实现,弥补 Java 单继承的限制。
- 提高代码的可扩展性和灵活性。
2️⃣ 接口的基本语法
// 定义接口
interface Animal {
void eat();
void sleep();
}
// 实现接口
class Dog implements Animal {
@Override
public void eat() {
System.out.println("狗吃骨头");
}
@Override
public void sleep() {
System.out.println("狗在睡觉");
}
}
使用:
public class TestInterface {
public static void main(String[] args) {
Animal a = new Dog(); // 多态
a.eat();
a.sleep();
}
}
3️⃣ 接口的特性
- 不能实例化:
new Animal()
是错误的。 - 类可以实现多个接口:
class Cat implements Animal, Serializable, Cloneable { ... }
- 接口可以继承接口:
interface A { void methodA(); } interface B extends A { void methodB(); }
4️⃣ 接口中的成员规则
在 Java 8+ 中,接口的成员越来越强大:
成员类型 | 说明 |
---|---|
常量 | 默认 public static final ,必须初始化 |
抽象方法 | 默认 public abstract |
静态方法 (Java 8+) | 可以直接在接口中实现 |
默认方法 (Java 8+) | 用 default 定义,子类可重写 |
私有方法 (Java 9+) | 供接口内部复用 |
示例:
interface MathTool {
int add(int a, int b); // 抽象方法
default int square(int x) { // 默认方法
return x * x;
}
static int abs(int x) { // 静态方法
return x < 0 ? -x : x;
}
}
5️⃣ 接口 vs 抽象类
对比点 | 接口 | 抽象类 |
---|---|---|
继承限制 | 支持 多实现 | 只能单继承 |
成员变量 | 只能 public static final | 可以有各种变量 |
方法 | 只能抽象/默认/静态方法 | 可以有抽象和普通方法 |
构造方法 | ❌ 没有 | ✅ 可以有 |
设计目的 | 定义 规范 | 提供 模板 |
👉 一句话记忆:
- 抽象类更偏向“代码复用”。
- 接口更偏向“行为规范”。
6️⃣ 接口的应用场景
- 统一标准:比如
JDBC
里的Connection
、Statement
、ResultSet
全是接口。 - 解耦:依赖接口而不是依赖具体实现,方便替换。
- 策略模式:不同实现类,执行不同策略。
- 回调机制:接口常用于事件监听(比如 GUI 的按钮点击)。
7️⃣ 一个完整例子
interface USB {
void connect();
void disconnect();
}
class Mouse implements USB {
public void connect() {
System.out.println("鼠标已连接");
}
public void disconnect() {
System.out.println("鼠标已断开");
}
}
class Keyboard implements USB {
public void connect() {
System.out.println("键盘已连接");
}
public void disconnect() {
System.out.println("键盘已断开");
}
}
public class TestUSB {
public static void main(String[] args) {
USB mouse = new Mouse();
USB keyboard = new Keyboard();
mouse.connect();
keyboard.connect();
}
}
📝 总结
- 接口是 规范/合同,实现类必须遵守。
- 接口支持 多实现、多继承,解决了单继承的限制。
- Java 8+ 给接口加了 默认方法和静态方法,更灵活。
- 常见场景:JDBC、回调、插件化、策略模式。
发表回复