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

使用场景

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

一句话

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

相关推荐
考虑考虑8 小时前
Mybatis实现批量插入
java·后端·mybatis
咖啡八杯9 小时前
GoF设计模式——中介者模式
java·后端·spring·设计模式
青石路13 小时前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java
像我这样帅的人丶你还16 小时前
Java 后端详解(五):Redis 缓存
java·后端·全栈
plainGeekDev18 小时前
GreenDAO → Room
android·java·kotlin
亦暖筑序1 天前
Java 8老系统AI Workflow实战:把一次性AI对话升级成可恢复工作流
java·后端
敲代码的彭于晏1 天前
Bean 生命周期完全图解:前端同学也能看懂的 Spring 核心机制
java·前端·后端
plainGeekDev1 天前
ButterKnife → ViewBinding
android·java·kotlin
像我这样帅的人丶你还2 天前
Java 后端详解(四):分页与搜索
java·javascript·后端
她的男孩2 天前
数据权限为什么不能只靠注解?Forge 的 Mapper 层 SQL 改写源码拆解
java·后端·架构