Java 接口 extends与 implements总结
1. 基本规则
- 类继承类:
class B extends A
单继承,子类继承父类的成员与行为。 - 类实现接口:
class C implements I
类为接口中的抽象方法提供具体实现。 - 接口继承接口:
interface J extends I
子接口继承父接口的所有抽象方法和默认方法,并可声明新的方法。 - 接口不能实现接口:
interface J implements I
❌ 不允许
因为接口不提供方法体,不存在“实现”的概念。
2. 为什么接口之间用 extends
?
- 语义上正确:接口只是契约,不能“实现”另一个契约,只能继承它的定义。
- 代码层面:
extends
表示子接口在父接口的契约基础上进行扩展。 - 设计原则:接口继承保证了“任何实现子接口的类,也必须实现父接口的所有方法”。
引用社区观点:
“An interface is a contract, not an implementation. That’s why interfaces extend other interfaces, they don’t implement them.”
(来自 StackOverflow)
3. 示例
接口继承接口
public interface Animal {void eat();
}public interface Pet extends Animal {void play();
}
类实现接口
public class Dog implements Pet {@Overridepublic void eat() { ... }@Overridepublic void play() { ... }
}
Pet
继承了Animal
的方法eat()
。Dog
实现Pet
,必须实现eat()
和play()
。
4. 优势
- 解耦:接口继承让契约层次清晰,调用者只依赖抽象。
- 扩展性:可以在子接口中扩展父接口的功能。
- 灵活性:类可以一次性实现多个接口,而接口本身可以多继承。
5. 对比表
关系 | 关键字 | 含义 |
---|---|---|
类继承类 | extends | 子类继承父类的实现(单继承) |
类实现接口 | implements | 类提供接口方法的具体实现 |
接口继承接口 | extends | 子接口继承父接口的契约(可多继承) |
接口实现接口(非法写法) | implements | ❌ 不允许 |
✅ 一句话记忆:
接口之间用
extends
,类实现接口用implements
;接口永远不会implements
另一个接口。