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

使用场景

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

一句话

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

相关推荐
jimy111 小时前
C++ 中的 `T&&`:右值引用与转发引用
开发语言·c++
captain37611 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
呆呆虫1211 小时前
用 orjson 加速 SerpBase 响应解析:基准对比与注意事项
开发语言·php
心中有你021411 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
心疼你的一切12 小时前
Python自动发邮件实战定时发报表
大数据·开发语言·python
步行cgn12 小时前
Spring MVC + Thymeleaf 模板解析失败:从 500 错误到页面正常显示
java·spring·mvc
lgcgkCQ13 小时前
【AI 转型实战 1】SpringAI 入门:搭建基础大模型对话能力
java·ai·agent·rag·spring ai·mcp·langchain4j
Wang's Blog13 小时前
Java 项目实战:交友项目 - 用户体系集成总结
java·开发语言·交友
学到老活到老13 小时前
第 24 集:配置文件写了 80,Spring Boot 为什么读到 90?
java·后端·spring
tongyiixiaohuang13 小时前
供应商主数据同步实战:从易快报到金蝶云星空的单一策略落地
java·网络·数据库