精通 Java super 关键字:高级用法与实战示例
精通 Java super 关键字:高级用法与实战示例
探索 super 关键字如何在 Java 继承中解锁强大能力,配合清晰示例与专家指导。
super 关键字是 Java 继承模型的基石,允许子类引用其直接父类的成员 —— 字段、方法和构造器。理解其细微差别对编写整洁、可维护代码至关重要。
super 的主要用途
- 调用被重写的父类方法。
- 访问被子类字段遮蔽的父类字段。
- 从子类构造器显式调用父类构造器。
下面通过代码样本深入各场景。
1. 调用被重写的父类方法
子类重写方法时,父类版本仍可通过 super.methodName() 访问。这对在保留原功能基础上扩展行为至关重要。
示例:方法重写与 super
class Animal { public void display() { System.out.println("I am an animal"); } } class Dog extends Animal { @Override public void display() { System.out.println("I am a dog"); } public void printMessage() { display(); // 调用 Dog.display() super.display(); // 调用 Animal.display() } } public class Main { public static void main(String[] args) { Dog dog = new Dog(); dog.printMessage(); } }
输出:
I am a dog I am an animal
使用 super.display() 确保执行父类实现,适用于扩展而非替换功能的场景。
2. 访问被遮蔽的父类字段
若父类和子类声明同名字段,子类字段会遮蔽父类字段。super.fieldName 可引用原始字段。
示例:字段遮蔽
class Animal { protected String type = "animal"; } class Dog extends Animal { public String type = "mammal"; public void printType() { System.out.println("I am a " + type); // Dog.type System.out.println("I am an " + super.type); // Animal.type } } public class Main { public static void main(String[] args) { Dog dog = new Dog(); dog.printType(); } }
输出:
I am a mammal I am an animal
3. 使用 super() 调用父类构造器
构造器不被继承,但子类可用 super() 调用父类构造器。这必须是子类构造器的第一条语句,且在父类无无参构造器或需传参时必须显式调用。
示例 1:默认构造器调用
class Animal { Animal() { System.out.println("I am an animal"); } } class Dog extends Animal { Dog() { super(); System.out.println("I am a dog"); } } public class Main { public static void main(String[] args) { new Dog(); } }
输出:
I am an animal I am a dog
示例 2:带参构造器调用
class Animal { Animal(String type) { System.out.println("Type: " + type); } } class Dog extends Animal { Dog() { super("Animal"); System.out.println("I am a dog"); } } public class Main { public static void main(String[] args) { new Dog(); } }
输出:
Type: Animal I am a dog
带参情况下,编译器无法自动调用非默认构造器,故 super(arguments) 强制要求。
精通 super 关键字能让你编写健壮的继承体系,确保重写逻辑可访问且构造器正确初始化。这些技术对可扩展的 Java 应用至关重要,符合行业专家推荐的最佳实践。
java
- 精通 Java 运算符:类型、语法与实战示例
- Java 注释:类型、用法与最佳实践
- 精通 Java if…else:控制流全解析
- 精通 Java 增强 for 循环:语法、示例与最佳实践
- Java break 语句:用法、时机与标签 break 详解
- 精通 Java 字符串:创建、方法与最佳实践
- 精通 Java 接口:概念、实现与最佳实践
- 精通 Java 匿名内部类:定义、语法与实战示例
- 精通 Java Try-With-Resources:自动资源管理详解
- Java 注解详解:类型、放置位置与实战示例
- Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
- 深入理解 Java Vector:用法、特性及与 ArrayList 的对比