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

Java 接口 extends与 implements总结


1. 基本规则

  • 类继承类class B extends A
    单继承,子类继承父类的成员与行为。
  • 类实现接口class C implements I
    类为接口中的抽象方法提供具体实现。
  • 接口继承接口interface J extends I
    子接口继承父接口的所有抽象方法和默认方法,并可声明新的方法。
  • 接口不能实现接口interface J implements I ❌ 不允许
    因为接口不提供方法体,不存在“实现”的概念。

2. 为什么接口之间用 extends

  • 语义上正确:接口只是契约,不能“实现”另一个契约,只能继承它的定义。
  • 代码层面extends 表示子接口在父接口的契约基础上进行扩展。
  • 设计原则:接口继承保证了“任何实现子接口的类,也必须实现父接口的所有方法”。

引用社区观点:

“An interface is a contract, not an implementation. That’s why interfaces extend other interfaces, they don’t implement them.”
(来自 StackOverflow)


3. 示例

接口继承接口

public interface Animal {void eat();
}public interface Pet extends Animal {void play();
}

类实现接口

public class Dog implements Pet {@Overridepublic void eat() { ... }@Overridepublic void play() { ... }
}
  • Pet 继承了 Animal 的方法 eat()
  • Dog 实现 Pet,必须实现 eat()play()

4. 优势

  • 解耦:接口继承让契约层次清晰,调用者只依赖抽象。
  • 扩展性:可以在子接口中扩展父接口的功能。
  • 灵活性:类可以一次性实现多个接口,而接口本身可以多继承。

5. 对比表

关系关键字含义
类继承类extends子类继承父类的实现(单继承)
类实现接口implements类提供接口方法的具体实现
接口继承接口extends子接口继承父接口的契约(可多继承)
接口实现接口(非法写法)implements❌ 不允许

一句话记忆

接口之间用 extends,类实现接口用 implements;接口永远不会 implements 另一个接口。


文章转载自:

http://ImhGA4J8.rxLck.cn
http://dXxD93iS.rxLck.cn
http://2yG1Yeen.rxLck.cn
http://GsQT3d3P.rxLck.cn
http://ut0qmJE8.rxLck.cn
http://NFneEOiZ.rxLck.cn
http://pUacl5p7.rxLck.cn
http://JA8cvPyg.rxLck.cn
http://Fy3V6nsR.rxLck.cn
http://RF9JVnIa.rxLck.cn
http://d0n4aNug.rxLck.cn
http://uKeQ5oOb.rxLck.cn
http://FGT7LvKD.rxLck.cn
http://M6Z9ZTxz.rxLck.cn
http://ifASsuJ9.rxLck.cn
http://cT0YIIHw.rxLck.cn
http://SIGGDswb.rxLck.cn
http://VmeE1wlZ.rxLck.cn
http://wSKocujt.rxLck.cn
http://aRo4sjvg.rxLck.cn
http://7MLELYkk.rxLck.cn
http://yBxHeiDN.rxLck.cn
http://V7u78TwC.rxLck.cn
http://beAru4JZ.rxLck.cn
http://vjHOJSPe.rxLck.cn
http://TeUhtSOb.rxLck.cn
http://fjMcLGeJ.rxLck.cn
http://wUNwdBic.rxLck.cn
http://9g5G3tCM.rxLck.cn
http://lvObB9ae.rxLck.cn
http://www.dtcms.com/a/373673.html

相关文章:

  • SMTP协议总结
  • 【系统分析师】第15章-关键技术:系统运行与维护(核心总结)
  • 深入理解算法效率——时间和空间复杂度详解
  • 让 3D 动画在浏览器中“活”起来!
  • Acrobat/Reader JavaScript 开发:Net.HTTP.Request 的使用与限制
  • QT通过QModbusRtuSerialMaster读写电子秤数据实例
  • 【实战中提升自己】内网安全部署之STP的安全技术部署
  • MYSQL数据库初阶 之 MySQL索引特性1【索引概念】
  • Django入门:框架基础与环境搭建
  • 数据结构题集-第四章-串-基础知识题
  • 【golang学习笔记 gin 】1.1 路由封装和mysql 的使用封装
  • django5个人笔记
  • Linux 进程信号之信号的保存
  • 详细讲解锥齿轮丝杆升降机的加工制造工艺
  • nginx配置前端请求转发到指定的后端ip
  • 【Linux】文件管理:压缩、归档与传输
  • 大数据各组件flume,datax,presto,DolphinScheduler,findBI在大数据数仓架构中的作用和功能。
  • 算法之常见八大排序
  • 某公共资源中心-sm2逆向
  • 数电实验二任务验证指南(开关操作与指示灯观察)
  • Redis Stream:轻量级消息队列深度解析
  • RAG-5-案例1
  • 点亮智慧城市:智能照明开关驱动器如何重塑路灯控制新纪元
  • 开发中使用——鸿蒙播放本地mp3文件
  • DLL修复是什么意思?为什么总会缺失?(详细教程)
  • 高强度应用下天硕工业级SSD固态硬盘真的更耐用吗?
  • c++基础学习(学习蓝桥杯 ros2有C基础可看)
  • SpringBoot学习日记 Day10:企业级博客系统开发实战(一)
  • 嵌入式学习---(硬件)
  • 写算法第二题(英语介词)dom对象