【Java】super关键字详解

发布时间:2026/11/1 1:46:48
【Java】super关键字详解 文章目录一、super 关键字1.1 super 是什么1.2 super 访问父类成员变量1.3 super 调用父类成员方法1.4 super 调用父类构造方法1.5 super 注意事项二、super 与 this 的区别2.1 概念对比2.2 调用构造方法的区别三、综合示例代码一、super 关键字1.1 super 是什么super作用在子类方法中访问父类成员访问父类的成员变量调用父类的成员方法调用父类的构造方法1.2 super 访问父类成员变量当子类定义了与父类同名的成员变量时此时可以通过super.变量名来访问父类的变量。publicclassAnimal{Stringname动物;}publicclassDogextendsAnimal{Stringname狗;publicvoidshow(){System.out.println(子类 name name);// 输出狗System.out.println(父类 name super.name);// 输出动物}}1.3 super 调用父类成员方法当子类重写Override父类的方法后如果还想调用父类被重写的方法可以使用super.方法名()。classAnimal{publicvoideat(){System.out.println(动物在吃东西);}}classDogextendsAnimal{Overridepublicvoideat(){super.eat();// 先调用父类的方法System.out.println(狗在啃骨头);}}1.4 super 调用父类构造方法super(参数列表)用于在子类构造方法中显式调用父类的构造方法。必须放在子类构造方法的第一行。classAnimal{publicAnimal(Stringname){System.out.println(父类构造方法name);}}classDogextendsAnimal{publicDog(Stringname){super(name);// 必须第一行System.out.println(子类构造方法);}}1.5 super 注意事项super不能出现在静态方法中因为静态方法属于类不依赖对象实例。super不能用于访问父类的私有成员private修饰的变量和方法。如果父类没有无参构造方法子类构造方法必须显式调用super(参数)否则编译报错。二、super 与 this 的区别2.1 概念对比对比superthis含义引用父类对象引用当前对象访问成员变量super.变量名访问父类成员this.变量名访问本类成员调用成员方法super.方法名()调用父类方法this.方法名()调用本类方法调用构造方法super(参数)调用父类构造方法this(参数)调用本类其他构造方法使用位置子类中本类中静态方法中使用不允许不允许2.2 调用构造方法的区别this(参数)调用本类的其他构造方法。super(参数)调用父类的构造方法。两者都必须放在构造方法的第一行因此不能同时出现。classPerson{publicPerson(){System.out.println(父类无参构造);}publicPerson(Stringname){System.out.println(父类有参构造name);}}classStudentextendsPerson{publicStudent(){this(张三);// 调用本类有参构造System.out.println(子类无参构造);}publicStudent(Stringname){super(name);// 调用父类有参构造System.out.println(子类有参构造);}}三、综合示例代码下面通过一个综合示例把 super 和 this 结合起来classBase{publicBase(){System.out.println(Base 构造方法);}publicBase(Stringmsg){System.out.println(Base 有参构造msg);}}classDerivedextendsBase{publicDerived(){this(默认);System.out.println(Derived 无参构造);}publicDerived(Stringmsg){super(msg);System.out.println(Derived 有参构造msg);}}publicclassMain{publicstaticvoidmain(String[]args){newDerived();}}输出结果Base 有参构造默认 Derived 有参构造默认 Derived 无参构造new Derived()触发子类无参构造Derived()Derived()第一行this(默认)→ 调用本类Derived(默认)进入Derived(String msg)第一行super(msg)→ 调用父类Base(默认)执行父类有参构造打印Base 有参构造默认回到子类有参构造继续往下执行打印Derived 有参构造默认回到子类无参构造执行this(默认)后面代码打印Derived 无参构造

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询