讲师中心 微信公众号
AI工具推荐 视频效率加速

Java接口与类的实现关系与核心概念

老墨君_8378

老墨君_8378

发布时间:2026-01-07 15:55:02

|

696人浏览过

|

来源于php中文网

原创

接口不能直接new,因其无构造方法且JVM禁止对接口执行new指令;但可声明引用变量(如Runnable r;),实际对象必须是实现类实例,支持多态和多实现。

java接口与类的实现关系与核心概念

接口不能直接 new,但可以声明引用类型

Java 中 interface 是纯抽象契约,没有构造方法,所以 new MyInterface() 会编译报错。但你可以用接口名声明变量,比如 Runnable r; —— 这只是声明了一个指向实现类对象的引用,实际对象必须是某个 class 的实例。

常见错误:把接口当类来实例化,或误以为 Runnable r = new Runnable() { ... }; 是“new 接口”,其实这是匿名内部类语法糖,背后生成的是一个隐式子类。

  • 接口变量只能调用接口中定义的方法,哪怕实际对象有额外方法也无法访问
  • 多态依赖此机制:同一接口引用可指向不同实现类,运行时动态绑定
  • JDK 8+ 接口可含 defaultstatic 方法,但它们不改变“不能实例化”的本质

类实现接口必须重写所有 abstract 方法(除非是 abstract class)

普通类用 implements 实现接口时,编译器强制要求覆盖所有未实现的抽象方法。否则编译失败,错误信息类似:The type XXX must implement the inherited abstract method YYY.ZZZ()

注意 abstract class 可以选择性实现接口方法,把剩余抽象方法留给子类处理——这是抽象类作为“中间层”的典型用途。

立即学习Java免费学习笔记(深入)”;

Alibabacloud Sdk Client Initialization For Java
Alibabacloud Sdk Client Initialization For Java

在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。

下载
  • 如果接口新增方法,所有非抽象实现类都会立刻编译失败,这是接口演进的风险点
  • 默认方法(default)不在此列,实现类可直接继承,也可选择重写
  • 多个接口有同名同签名的 default 方法时,实现类必须显式重写,否则编译报错

一个类可以 implements 多个接口,但只能 extends 一个类

Java 不支持多继承,但允许多实现。例如:class A implements Runnable, Comparable<A>, AutoCloseable 是完全合法的。

这使得接口成为组合行为的理想载体:Runnable 表示“可运行”,AutoCloseable 表示“需关闭”,二者语义正交,可同时赋予一个类。

  • 接口之间可用 extends 继承(如 SortedSet<E> extends Set<E>),支持多继承接口
  • 若两个接口定义了相同签名的 default 方法,且无 override,则编译不通过
  • 实现类中调用 super 访问特定接口的 default 方法,语法为 InterfaceName.super.method()

接口与类在字节码和运行时的本质区别

编译后,接口生成 .class 文件,但其字节码标记为 ACC_INTERFACE,且不含实例字段(ACC_STATIC 字段除外)、不含构造器、所有方法默认 ACC_PUBLIC ACC_ABSTRACT(JDK 8+ 还可能有 ACC_DEFAULT)。

而普通类的字节码是 ACC_CLASS,包含字段、构造器、实例方法等完整结构。JVM 在验证阶段就禁止对接口执行 new 指令。

  • 反射中:MyInterface.class.isInterface() 返回 trueMyClass.class.isInterface()false
  • instanceof 可用于接口,判断对象是否实现了该接口,底层依赖类的 interfaces[] 元数据
  • 接口方法调用使用 invokeinterface 字节码指令,与 invokevirtual 分开处理,有独立的解析与缓存逻辑
interface Animal {
    void sound(); // abstract by default
    default void breathe() {
        System.out.println("breathing...");
    }
}

class Dog implements Animal {
    public void sound() { // 必须实现
        System.out.println("woof");
    }
    // breathe() 可直接继承,无需重写
}
接口不是模板类,也不是轻量级类——它是 JVM 层级的独立类型系统成员。真正容易被忽略的,是 default 方法带来的二进制兼容性假象:加了 default 方法看似安全,但若实现类恰好已有同签名私有方法,就会因冲突而编译失败。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

相关专题

更多
java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

295

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

295

2025.11.27

java多继承如何实现
java多继承如何实现

本专题整合了java多继承相关内容以及教程,阅读专题下面的文章了解更多详细内容。

378

2025.10.28

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

3028

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

4189

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3649

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

366

2026.01.19

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

3096

2024.01.03

Vibeknow在线使用入口合集
Vibeknow在线使用入口合集

本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

0

2026.09.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn