Java 中主要有 5 种类型:
| 类型 | 关键字 | 特点 |
|---|---|---|
| 普通类 | class |
完整实现,可直接实例化 |
| 抽象类 | abstract class |
半成品,有抽象方法,不能直实例化 |
| 接口 | interface |
纯规范,JDK8+ 可有默认方法 |
| 枚举 | enum |
固定常量集合,如星期、状态 |
| 注解 | @interface |
元数据标记,如 @Override |
快速对比
// 普通类
public class Dog { }
// 抽象类
public abstract class Animal { }
// 接口
public interface Flyable { }
// 枚举
public enum Status { SUCCESS, FAIL }
// 注解
public @interface MyAnnotation { }
特殊说明
| 类型 | 补充 |
|---|---|
| 内部类 | 类中定义的类(成员/静态/局部/匿名) |
| 记录类 | JDK14+ record Point(int x, int y),简化数据类 |
一句话
最常用:普通类、抽象类、接口 ;特定场景用:枚举、注解。
普通类,抽象类,接口的区别
三者核心区别
| 特性 | 普通类 | 抽象类 | 接口 |
|---|---|---|---|
| 关键字 | class |
abstract class |
interface |
| 实例化 | ✅ 可以直接 new |
❌ 不能直接 new |
❌ 不能直接 new |
| 构造方法 | ✅ 有 | ✅ 有(供子类调用) | ❌ 没有 |
| 成员变量 | 任意 | 任意 | 默认 public static final(常量) |
| 方法 | 全部实现 | 抽象方法 + 普通方法 | JDK8前全抽象;JDK8+可有默认/静态方法 |
| 继承/实现 | 单继承 | 单继承 | 多实现 |
| 设计目的 | 完整功能 | 代码复用 + 部分规范 | 纯规范/能力定义 |
抽象类,接口的区别
接口是自上而下的设计,在功能开发初期,知道这个功能需要哪些方法,但是具体实现还不确定怎么写,就可以先把这些行为定义成接口,这就小自上而下的设计。
抽象类是自下而上的设计,在开发一段时间之后,发现几个类的逻辑很相似,代码很多重复,维护痛苦,这时候就可以把重复代码抽出来,做一个父类,让子类调用。
代码对比
java
// 普通类:完整实现
public class Dog {
public void eat() { System.out.println("吃东西"); }
}
// 抽象类:模板 + 部分实现
public abstract class Animal {
protected String name; // 实例变量
public abstract void speak(); // 抽象方法
public void sleep() { } // 普通方法
}
// 接口:纯规范
public interface Flyable {
int MAX_HEIGHT = 10000; // 默认 public static final
void fly(); // 默认 public abstract
default void land() { } // JDK8+ 默认方法
}
使用场景
| 场景 | 选择 |
|---|---|
| 完整功能,直接复用 | 普通类 |
| 有共同代码,部分方法需子类实现 | 抽象类 |
| 定义能力/规范,与实现解耦 | 接口 |
| 需要多继承(实现多个能力) | 接口 |
一句话
普通类 = 成品;抽象类 = 半成品模板;接口 = 能力契约。