当前位置: 首页 > news >正文

Java 抽象类 vs 接口(Abstract Class vs Interface)对比笔记


一、基本定义

概念抽象类 (abstract class)接口 (interface)
定义一个包含抽象方法(或不包含)不能实例化的类一种全是抽象方法(或默认实现)的特殊类型
关键字abstractinterface
实现方式使用 extends 继承使用 implements 实现

二、语法格式

抽象类示例:

public abstract class Animal {String name;public Animal(String name) {this.name = name;}public abstract void makeSound(); // 抽象方法public void eat() {System.out.println(name + " is eating...");}
}

接口示例:

public interface Flyable {void fly(); // 抽象方法default void takeOff() {System.out.println("Taking off...");}
}

三、相同点

  • 都不能直接实例化;
  • 都可以包含抽象方法;
  • 都可以被子类/子接口实现或继承;
  • 都支持多态。

四、主要区别(对比表)

比较维度抽象类接口
语法关键字abstract classinterface
实现关键字子类用 extends 继承实现类用 implements 实现
多继承支持不支持多继承(单继承限制)支持多个接口同时实现
成员变量可有字段、构造器,可有静态/实例变量只能定义 public static final 常量(默认)
构造函数可以有构造函数不能有构造函数
默认方法实现可以有普通方法(非抽象)支持 default 方法(Java 8+)
抽象方法可有,也可没有所有非默认方法都是抽象方法(除非默认/static)
可访问修饰符public / protected / private / default只能是 public(隐式)
是否可多实现只能单继承可多实现多个接口
是否可继承Object是类,自动继承 Object接口不继承 Object,只能由类实现
设计目标表达“is-a” 关系,抽象通用父类表达“can-do”能力或行为规范

五、使用场景比较

使用场景建议使用
表示一个对象的通用父类型抽象类(继承体系)
定义一组行为规范或能力接口(行为能力)
需要共享部分代码实现抽象类
需要跨类结构复用规范接口
多个类都需要提供某些方法实现接口(可被多个类实现)

六、接口的多继承 vs 抽象类的单继承

interface A {void a();
}interface B {void b();
}class C implements A, B {public void a() {}public void b() {}
}
abstract class D {}
abstract class E {}
//  class F extends D, E {} // 编译错误:抽象类只能单继承

七、JDK 8+ 以后的接口增强

Java 8 后接口支持以下特性:

特性说明
default 方法接口可有默认实现的方法(非抽象)
static 方法接口可定义静态工具方法
private 方法Java 9+ 支持私有方法重用
interface Logger {default void log(String msg) {System.out.println("INFO: " + msg);}static void version() {System.out.println("Logger v1.0");}
}

八、实例场景举例

抽象类适用:

abstract class Shape {String color;abstract double area();
}

接口适用:

interface Drawable {void draw();
}interface Printable {void print();
}class Circle implements Drawable, Printable {public void draw() {}public void print() {}
}

九、经典面试问答

Q1:抽象类和接口有什么区别?

  • 抽象类用于抽象出共性;接口用于定义一组功能;
  • 抽象类只能单继承,接口可多实现;
  • 接口更适合行为复用,抽象类更适合结构封装。

Q2:何时使用抽象类?何时使用接口?

  • 如果你需要共享代码 + 强结构控制,用抽象类;
  • 如果你希望解耦行为 + 支持多实现,用接口。

Q3:可以同时使用抽象类和接口吗?

可以,一个类可以:

abstract class A implements Interface1, Interface2 { }

十、小结

维度抽象类接口
单继承限制否(可多实现)
成员结构变量、构造器、抽象/非抽象方法抽象方法、默认方法、常量
构造函数支持不支持
面向设计思想抽象、模板、父类通用结构行为扩展、能力标准
推荐使用场景有共性代码或父类属性横向能力、插件机制、工具协议等
http://www.xdnf.cn/news/1171729.html

相关文章:

  • 220V降5V,输出100MA,为家电电器消费类产品提供电源WD5202L
  • 【Dify】-进阶11- 权限与发布配置详解
  • ESP32-CAM实战:DIY基于OpenAI的AI视觉识别相机
  • 显微科研中的关键选择:不同显微镜相机技术特性与应用适配性全面解析
  • k8s pvc是否可绑定在多个pod上
  • 学生信息管理系统 - HTML实现增删改查
  • 硬件基础 -- 信号完整性
  • solidity从入门到精通 第四章:智能合约的生命周期
  • 需要系统的学习下Docker的使用
  • 【图像处理基石】如何对遥感图像进行目标检测?
  • Upload-Labs通关全攻略详细版
  • 二进制安装 Kubernetes 高可用集群
  • 设计模式(单例)
  • 《从C风格到C++风格:内存管理的进化之路》
  • JavaScript 02 数据类型和运算符数组对象
  • JavaScript 01 JavaScript 是什么
  • AI智能体“上下文工程”实践:来自 Manus 项目的经验总结
  • 大模型后训练——DPO实践
  • 代码随想录算法训练营第二十八天
  • ZLMediaKit 入门
  • 日常随笔-React摘要
  • List和Map的区别
  • Java函数式编程深度解析:从基础到高阶应用
  • Dify-13: 文本生成API端点
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | ImageCarousel(图片轮播组件)
  • wed前端简单解析
  • 小鹏汽车视觉算法面试30问全景精解
  • SpringAOP的实现原理和场景
  • 消息推送功能设计指南:精准触达与用户体验的平衡之道
  • 遇到JAVA问题