在Java中,super关键字用于访问父类的成员(包括变量、方法和构造函数),其核心用法可归纳为以下四点:
1. 调用父类构造函数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始终指向直接父类,无法跳过中间类访问更高祖先。
- 静态上下文:super不能用于静态方法(因静态成员与类相关,而非实例)。
总结super的核心是解决子类与父类成员命名冲突或显式调用父类逻辑。合理使用能提升代码可读性,但需注意访问权限和继承结构的限制。