当前位置: 首页 > 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 普及组] 装箱问题)
  • 游客曝九寨沟打网约车被出租车围堵,景区回应:当地无合规网约车
  • 买新房可申领学位,广州南沙出台购房入学政策
  • 外交部:欢迎外国朋友“五一”来中国
  • 外交部:对伊朗拉贾伊港口爆炸事件遇难者表示深切哀悼
  • 中国黄金协会:一季度我国黄金产量同比增1.49%,黄金消费量同比降5.96%
  • 俄罗斯称已收复库尔斯克州,普京发表讲话