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

Java super 关键字

super代表父类(超类)对象引用,仅存在子类中,用来访问父类的成员,和代表当前对象的this对应。

一、super 三种核心用法

1. super.成员变量:访问父类同名成员变量

子类和父类属性重名时,默认优先访问子类,用super.属性指定父类。

classParent{Stringname="父类";}classSonextendsParent{Stringname="子类";voidshow(){System.out.println(name);// 子类(自身)System.out.println(super.name);// 父类(super访问父类)}}

2. super.方法():调用父类重写前的方法

子类重写父类方法后,直接调用是子类自身实现;super.方法()执行父类原始逻辑。

classParent{voidsay(){System.out.println("父类说话");}}classSonextendsParent{@Overridevoidsay(){super.say();// 先调用父类方法System.out.println("子类说话");}}

3. super():调用父类构造方法

规则:
  1. super()必须写在子类构造方法第一行
  2. 不写super(),编译器默认隐式添加无参super()
  3. 父类只有有参构造,子类必须手动super(参数),否则编译报错;
  4. super()this()不能同时存在构造器,都要求放第一行。
classParent{Stringname;// 有参构造Parent(Stringname){this.name=name;}}classSonextendsParent{// 子类构造必须调用父类有参构造Son(){super("父类姓名");// 必须第一行}}

二、super 与 this 对比

特性thissuper
含义当前类对象引用父类对象引用
访问变量本类成员变量父类成员变量
调用方法本类方法父类方法
构造调用this()调用本类其他构造super()调用父类构造
使用位置普通方法、构造方法普通方法、构造方法
静态方法不能使用不能使用

三、关键注意事项

  1. 静态方法不能用 super / this
    static 属于类,没有实例对象,super/this 依赖对象,编译报错。
  2. 构造器中super()隐含调用顶层 Object
    所有类直接/间接继承 Object,无参构造最终都会走到super()调用 Object 构造。
  3. 多层继承时,super 只直接访问直接父类,不能隔代访问爷爷类(需要爷爷类提供方法中转)。
  4. super 不能在静态代码块、静态方法中出现。

四、完整综合示例

// 父类classAnimal{Stringtype="动物";publicAnimal(){System.out.println("父类无参构造");}publicvoidrun(){System.out.println("动物奔跑");}}// 子类classDogextendsAnimal{Stringtype="小狗";publicDog(){super();// 调用父类构造,可省略}@Overridepublicvoidrun(){System.out.println(this.type);// 子类变量System.out.println(super.type);// 父类变量super.run();// 父类方法System.out.println("小狗四条腿跑");}}publicclassTest{publicstaticvoidmain(String[]args){Dogdog=newDog();dog.run();}}

输出:

父类无参构造 小狗 动物 动物奔跑 小狗四条腿跑

五、常见面试考点

  1. 子类构造方法默认第一行隐式super()
  2. 父类无无参构造,子类必须显式super(实参)
  3. super()this()互斥,不能共存;
  4. super 只能在实例方法/构造器,static 中禁用;
  5. 方法重写后通过super.方法()复用父类逻辑。
http://www.cnnetsun.cn/news/3119051.html

相关文章:

  • STM32F756ZG与MC74HC165A实现高效多路输入扩展方案
  • kiran-log完全解析:基于zlog的Qt5与GTK3日志封装库入门指南
  • Unity MyFramework:框架内资源管理和 YooAsset 有什么区别
  • DVWA从入门到精通(三):Command Injection(命令注入)
  • WorkshopDL终极指南:无需Steam账号免费下载创意工坊模组
  • LLM开发者生存图谱:大模型工程化落地的四层架构与成本可控实践
  • Navicat Mac版无限试用终极指南:三种简单方法免费使用Navicat Premium
  • 3个妙招解决Quark-Auto-Save转存失败:从空间不足到自动化管理的完整指南
  • BLDC电机FOC控制:A89307驱动芯片与PIC32MX795F512L方案详解
  • STM32与TB9051FTG实现静音直流电机控制方案
  • 5种ExplorerPatcher安装失败的深度解析与专业修复方法
  • ICM-42688-P高精度IMU与STM32的工业运动感知实践
  • 计算机毕业设计之 基于大语言模型的课程答疑系统的设计与实现
  • API-First无头CMS构建指南:从原理到实践
  • 如何通过在线旅游营销课程实现传统旅行社转型?
  • 告别网盘下载限制:浏览器脚本解锁九大云盘直链下载新体验
  • 基于Qt的NodeEditor节点编辑器开发指南
  • 4-20mA电流环原理与STM32工业信号采集实战
  • 锂电牵引辊需具备哪些核心性能?靠谱生产厂家怎么选?
  • 终极方案:Scroll Reverser专业解决macOS多设备滚动冲突
  • 实时 3D 场景重建新突破:LingBot-Map 前馈式模型,万帧视频秒变点云
  • 远程协助软件哪个好 手机怎么远程办公
  • Steam创意工坊跨平台下载技术解析:WorkshopDL分布式下载引擎架构实现
  • Fast-GitHub技术深度解析:浏览器扩展加速GitHub访问的技术实现
  • 实战指南:OpenSpeedy游戏加速引擎的完全使用方案
  • AI Agent安全攻防体系:OWASP、沙箱化与权限治理的工程落地
  • 制药企业2026年智能化改造项目备案数据分析
  • 终极免费方案:如何用Wand-Enhancer突破游戏修改器的时间限制
  • WebRTC弱网测试怎么做?从指标到工具,一套完整方案
  • 在 Python 中何时使用 classmethod、staticmethod 或实例方法