0

0

在Java里如何使用super调用父类方法_Java继承关系解析

P粉602998670

P粉602998670

发布时间:2026-02-07 13:48:10

|

441人浏览过

|

来源于php中文网

原创

super只能在子类非静态方法或构造器中使用:构造器首行调用super()初始化父类,实例方法中用super.method()调用被重写父类方法;静态上下文、接口体等场景禁止使用。

在java里如何使用super调用父类方法_java继承关系解析

super调用父类方法时,必须在子类非静态方法或构造器中使用

在Java中,super不是万能的“父类引用”,它只在有明确继承上下文且对象已部分构建时才有效。最常见误用是试图在静态方法里写 super.method() —— 编译直接报错:non-static variable super cannot be referenced from a static context

真正可用的场景只有两个:

  • 在子类构造器第一行调用 super(...)(显式或隐式),用于初始化父类状态
  • 在子类实例方法中用 super.methodName() 调用被重写的父类方法

注意:不能在静态方法、静态代码块、lambda 表达式或接口默认方法(除非该接口方法被类继承并重写)中使用 super

重写方法里调用 super.xxx() 与直接写 xxx() 的行为差异

关键区别在于绑定时机:super.xxx() 强制调用父类版本(编译期绑定),而 this.xxx() 或裸调用 xxx() 是运行时动态绑定,可能触发多态调用到当前对象实际类型的重写版本。

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

比如父类 Alog(),子类 B extends A 重写了它,又在 B 中定义新方法 print()

void print() {
    super.log(); // 总是执行 A.log()
    log();       // 如果 print() 被 C extends B 调用,且 C 也重写了 log(),这里会执行 C.log()
}

这种差异在模板方法模式或回调链中特别关键——漏写 super. 可能导致父类初始化逻辑被跳过。

super() 必须是构造器的第一条语句,且不能和 this() 共存

Java 规定子类构造器要么以 super(...) 开头,要么以 this(...) 开头,二者互斥。如果没写任何显式调用,编译器会自动插入 super()(无参);但一旦父类没有无参构造器,就会编译失败。

Face++旷视
Face++旷视

Face⁺⁺ AI开放平台

下载

典型错误现象:

  • Constructor not defined in parent class(父类只有带参构造器,子类构造器又没显式调用 super(x)
  • Call to super must be first statement(在 super(...) 前写了变量声明或日志打印)

解决办法:检查父类构造器签名,确保子类构造器首行匹配调用;若需复用逻辑,优先提取为工具方法,而非试图绕过这条限制。

接口中无法使用 super 调用默认方法,除非通过类继承链间接触发

Java 接口的默认方法属于“静态可解析”的契约实现,super 关键字在接口中完全不可用。你不能在接口内写 super.toString() 或类似表达式。

但当一个类实现了多个接口,且这些接口有同名默认方法时,编译器会要求该类显式覆写并用 InterfaceName.super.method() 明确选择调用来源:

public class C implements I1, I2 {
    public void m() {
        I1.super.m(); // 合法:限定接口名 + super
        // super.m(); // 编译错误:接口中不允许裸 super
    }
}

这个语法是特例,仅适用于接口冲突解决,不适用于普通继承场景,也别和类中的 super 混淆。

最容易被忽略的是:super 在类中永远指向**直接父类**,不会跨级跳转;而接口的 I1.super.m() 是显式路径,和继承层级无关。这两者语义不同,不能互相替代。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

191

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

4

2026.02.03

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

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

17

2025.11.27

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

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

17

2025.11.27

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

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

17

2025.11.27

lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

211

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

191

2025.11.08

Python lambda详解
Python lambda详解

本专题整合了Python lambda函数相关教程,阅读下面的文章了解更多详细内容。

58

2026.01.05

Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

2

2026.02.06

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.3万人学习

C# 教程
C# 教程

共94课时 | 8.8万人学习

Java 教程
Java 教程

共578课时 | 59.4万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号