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

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

接口(interface)和抽象类(abstract class)都是 Java 中常用的“抽象”工具,用来定义类的规范和结构,但它们有一些本质的区别。下面我用一个简单明了的表格 + 说明来帮你理解:

对比点抽象类(Abstract Class)接口(Interface)
关键词abstract classinterface
是否可包含实现✅ 可以有方法实现、构造函数、成员变量❌(Java 8 之后可以用 defaultstatic 方法)
多继承支持❌ 只能继承一个抽象类✅ 可以实现多个接口
使用场景表示“是一个什么”关系(is-a)表示“能做什么”能力(can-do)
构造函数✅ 有构造函数❌ 没有构造函数
状态(字段)✅ 可以有成员变量🚫 接口中的变量默认是 public static final 常量

简单举例:

抽象类例子
abstract class Animal {String name;abstract void makeSound();void sleep() {System.out.println("Sleeping...");}
}
接口例子
interface Flyable {void fly();
}

如果你写一个 Bird 类,可以这样组合:

class Bird extends Animal implements Flyable {void makeSound() {System.out.println("Chirp");}public void fly() {System.out.println("Flying high!");}
}

总结口诀:

  • 抽象类像模板,可以提供一部分默认实现;
  • 接口像协议,只规定规则,不管怎么实现;
  • 想让一个类**“拥有某种能力”**,用接口;
  • 想让一个类**“继承某种通用结构”**,用抽象类。

相关文章:

  • 在 WSL 安装 OpenFOAM-12
  • stone 3d v3.3.0版本发布,含时间线和连接器等新功能
  • Coding Practice,48天强训(22)
  • Nginx通过自定义参数,实现同一域名在不同设备下访问不同站点的操作
  • RefFormer论文精读
  • 【MySQL专栏】MySQL数据库的复合查询语句
  • 用 LangChain 手搓 RAG 系统:从原理到实战
  • [AI技术(二)]JSONRPC协议MCPRAGAgent
  • Cadence学习笔记之---原理图设计基本操作
  • ValidatorUtils工具
  • 《Piper》皮克斯技术解析:RIS系统与云渲染如何创造奥斯卡级动画短片
  • 【C语言练习】002. 理解C语言的基本语法结构
  • ECMAScript 1(ES1):JavaScript 的开端
  • 基于大牛直播SDK的Android屏幕扬声器采集推送RTMP技术解析
  • 浅谈OpenAIClaude LLM Tools的额外配置
  • 计算机网络中的DHCP是什么呀? 详情解答
  • 【速写】钩子与计算图
  • 抓包工具Wireshark的应用解析
  • Linux文件管理完全指南:从命名规则到压缩解压
  • 每日c/c++题 备战蓝桥杯(P1049 [NOIP 2001 普及组] 装箱问题)
  • 44岁街舞运动推广者、浙江省街舞运动协会常务理事钟永玮离世
  • 定位真核生物起源于约27.2亿年前,华东师大团队在《自然》发文
  • 中邮保险斥资8.69亿元举牌东航物流,持股比例达5%
  • 潘功胜发布会答问五大要点:除了降准降息,这些政策“含金量”也很高
  • 六大车企一季报:比亚迪近92亿净利稳居第一,多家车企营收下滑
  • 上海模速空间“北斗七星”与“群星”生态布局,正在做些什么?