Java 中什么时候用抽象类什么时候用接口
优先使用接口定义能力契约,优先使用抽象类提供共享实现和状态。具体做法是:如果多个类需要共享代码、字段或构造函数逻辑,选抽象类;如果只需要声明方法签名且允许不相关的类实现,选接口。java 8 之后接口可以包含默认方法,但应避免在接口中维护状态。

需要共享代码或状态时选什么
当子类之间存在公共的实现逻辑或需要保存实例状态时,应使用抽象类。接口无法拥有实例字段,因此不适合这种场景。

public abstract class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
// 共享的具体实现
public void sleep() {
System.out.println(name + " is sleeping");
}
// 抽象方法,强制子类实现
public abstract void makeSound();
}需要定义行为契约时选什么
当关注点在于“能做什么”而非“是什么”时,应使用接口。接口支持多继承,适合跨类层次结构的能力扩展。
立即学习“Java免费学习笔记(深入)”;

public interface Swimmable {
void swim();
}
public interface Flyable {
void fly();
}


















