跳转到主内容
极星编程网:以代码为星,赴技术山海!

super关键字在调用父类构造器与隐藏成员时用法

super是Java中访问父类成员的关键字,用于调用父类构造器(必须在子类构造器首行)和访问被隐藏的父类实例成员(不能用于静态上下文);它不创建新对象,仅初始化当前对象的父类部分。

super是 Java 中用于访问父类成员的关键字,主要用在两种典型场景:调用父类构造器、访问被子类隐藏的父类成员(字段或方法)。它不能独立使用,必须出现在子类的构造器或实例方法中,且需注意调用时机和语法限制。

调用父类构造器子类构造器默认第一行会隐式调用super()(无参父类构造器)。若父类没有无参构造器,或你想显式调用特定父类构造器,则必须用super(...)显式写在子类构造器的第一行。

必须是子类构造器中的第一条语句,否则编译报错参数类型和个数需与父类某个构造器匹配不能与this(...)同时出现(二者都必须在第一行)

例如:

class Animal {Animal(String name) { System.out.println("Animal: " + name); }}class Dog extends Animal {Dog() {super("Buddy"); // 必须显式调用,因 Animal 无无参构造器}}访问被隐藏的父类成员当子类定义了与父类同名的实例字段或方法(非重写),父类成员会被“隐藏”。此时可用super.成员名明确访问父类版本。

适用于实例字段(super.field)和实例方法(super.method())

不能用于静态成员(应直接用父类名.静态成员)

不能在 static 方法或静态上下文中使用(super 属于实例上下文)

例如:

class Parent {String name = "Parent";void show() { System.out.println("Parent.show"); }}class Child extends Parent {String name = "Child";void display() {System.out.println(super.name); // 输出 "Parent"super.show(); // 调用 Parent 的 show()}}常见误区提醒super()不是创建父类对象,只是初始化当前对象的父类部分子类对象只有一个,super和this指向同一内存地址,只是视角不同构造器链中,super(...)最终会抵达Object(),完成整个继承链初始化若父类构造器抛出异常,子类构造器也必须声明相同异常或其父类

相关文章