Java 中类与接口的区别核心区别
| 特性 | 类(Class) | 接口(Interface) |
|---|---|---|
| 实例化 | 可以 new 创建对象 |
❌ 不能直接实例化 |
| 继承 | 单继承(extends 1个类) |
多实现(implements 多个接口) |
| 构造方法 | 有 | ❌ 没有 |
| 字段 | 任意类型成员变量 | 只能是 public static final 常量 |
| 方法 | 任意方法(具体/抽象) | 可有抽象方法、default 方法、static 方法 |
| 访问修饰符 | 任意 | 方法默认 public |
| 多态 | 通过继承实现 | 通过实现/继承实现,支持多类型 |
1. 类(Class)— 描述"是什么"
public class Dog {
private String name; // 可以有各种访问级别的字段
public Dog(String name) { // 有构造方法
this.name = name;
}
public void bark() { // 具体方法
System.out.println("汪汪!");
}
}
- 单继承:只能
extends一个父类 - 可以有状态(成员变量)和行为(方法)
- 是运行时实体,可以
new Dog("旺财")
2. 接口(Interface)— 描述"能做什么"
public interface Flyable {
void fly(); // 抽象方法(默认 public abstract)
default void glide() { // default 方法(Java 8+)
System.out.println("滑翔中...");
}
static void info() { // static 方法(Java 8+)
System.out.println("Flyable 接口");
}
}
- 多实现:一个类可同时实现多个接口
public class Bird extends Animal implements Flyable, Swimmable {
@Override
public void fly() { ... }
@Override
public void swim() { ... }
}
3. 关键设计哲学
类 → IS-A 关系(Bird IS-A Animal)
接口 → CAN-DO 关系(Bird CAN-DO Flyable)
- 类定义的是身份(我是什么)
- 接口定义的是能力(我能做什么)
4. Java 8 之后接口的进化
public interface Vehicle {
void start(); // 抽象方法
default void horn() { // default 方法(可有方法体)
System.out.println("嘀嘀");
}
static int maxSpeed() { // static 方法
return 200;
}
int MAX_WEIGHT = 1000; // 隐含 public static final
}
Java 9 还引入了
private方法,供default方法内部复用。
5. 什么时候用哪个?
| 场景 | 选择 |
|---|---|
| 需要有构造函数、状态字段 | 类 |
| 需要定义一组规范/契约 | 接口 |
| 需要多重继承的能力 | 接口 |
| 需要代码复用(工具方法) | 抽象类 |
| 事件监听、回调 | 接口(如 OnClickListener) |
更多推荐

所有评论(0)