java中super的使用方法

兄弟们在线问一下,java中super的使用方法
最新回答
旧情人怎能变知己

2026-10-17 10:39:21

在Java中,super关键字用于访问父类的成员(包括变量、方法和构造函数),其核心用法可归纳为以下四点:

1. 调用父类构造函数
  • 作用:在子类构造函数中,通过super()显式调用父类的构造函数。若省略,编译器会自动插入对父类无参构造函数的调用。
  • 规则:

    super()必须是子类构造函数的第一条语句(与this()互斥)。

    若父类没有无参构造函数,子类必须显式调用父类的有参构造函数。

  • 示例:class Parent { Parent(String name) { System.out.println("Parent: " + name); }}class Child extends Parent { Child() { super("John"); // 显式调用父类有参构造 }}
2. 访问父类变量
  • 作用:当子类重写了父类的变量(实际不推荐,因Java无变量重写),或需明确访问父类变量时,使用super.变量名。
  • 注意:若父类变量未被隐藏(同名),直接使用变量名即可。
  • 示例:class Parent { int age = 50; }class Child extends Parent { int age = 20; void printAge() { System.out.println("Child's age: " + age); // 20 System.out.println("Parent's age: " + super.age); // 50 }}
3. 调用父类方法
  • 作用:在子类中调用父类被重写的方法,使用super.方法名()。
  • 典型场景:扩展父类方法功能时,先调用父类方法,再添加子类逻辑。
  • 示例:class Parent { void greet() { System.out.println("Hello from Parent"); }}class Child extends Parent { @Override void greet() { super.greet(); // 先调用父类方法 System.out.println("Hello from Child"); // 再扩展 }}
4. 访问父类私有成员(特殊情况)
  • 限制:

    私有变量:无法通过super直接访问(因私有成员仅限类内部访问)。

    私有方法:仅当子类与父类在同一包中时,可通过super.私有方法名()调用(但通常不推荐依赖包级私有访问)。

  • 示例(同一包内):package com.example;class Parent { private void secret() { System.out.println("Parent's secret"); }}class Child extends Parent { void reveal() { super.secret(); // 仅在同一包中有效 }}
关键注意事项
  1. 构造函数调用链:super()会触发父类构造函数的执行,确保对象初始化顺序正确。
  2. 多级继承:super始终指向直接父类,无法跳过中间类访问更高祖先。
  3. 静态上下文:super不能用于静态方法(因静态成员与类相关,而非实例)。
总结

super的核心是解决子类与父类成员命名冲突或显式调用父类逻辑。合理使用能提升代码可读性,但需注意访问权限和继承结构的限制。