Java中的类、普通类,抽象类,接口的区别

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+ 默认方法
}

使用场景

场景 选择
完整功能,直接复用 普通类
有共同代码,部分方法需子类实现 抽象类
定义能力/规范,与实现解耦 接口
需要多继承(实现多个能力) 接口

一句话

普通类 = 成品;抽象类 = 半成品模板;接口 = 能力契约。

相关推荐
云烟成雨TD3 小时前
Spring AI 1.x 系列【57】动态工具发现:Tool Search Tool
java·人工智能·spring
zfoo-framework3 小时前
[修改代码使用]codex官方app中使用中转(不需要cc-switch) 1.config.toml 2.sk方式登录
java
天佑木枫3 小时前
15天Python入门系列 · 序
开发语言·python
逍遥德3 小时前
MQTT教程详解-05.SpringBoot集成mqtt client 性能分析
java·spring boot·spring·mt
云烟成雨TD4 小时前
Spring AI 1.x 系列【54】Retry 机制分析
java·人工智能·spring
weixin_523185324 小时前
Collections.unmodifiableMap详解:真的不可修改吗?
java·linux·前端
点燃大海4 小时前
SpringAI构建智能体
java·spring boot·spring·springai智能体
xier_ran4 小时前
【infra之路】02_RadixAttention与KV_Cache管理
java·spring boot·spring
黑马师兄4 小时前
RAG混合检索深度解析:让AI真正找到你要的内容
java·人工智能·ai·agent·rag·ai-native
码客日记4 小时前
Spring Boot 配置文件敏感信息加密(Jasypt 企业级完整方案)
java·spring boot·git