Java super关键字详解与案例
super关键字主要用于子类访问父类的成员(变量、方法、构造方法),以下是几个典型的使用案例:

调用父类构造方法
class Animal {
String name;
int age;
// 父类构造方法
public Animal(String name, int age) {
this.name = name;
this.age = age;
System.out.println("Animal构造方法被调用");
}
}
class Dog extends Animal {
String breed;
// 子类构造方法中使用super调用父类构造方法
public Dog(String name, int age, String breed) {
super(name, age); // 必须放在第一行
this.breed = breed;
System.out.println("Dog构造方法被调用");
}
}
public class Test {
public static void main(String[] args) {
Dog dog = new Dog("旺财", 3, "金毛");
}
}
输出:
Animal构造方法被调用
Dog构造方法被调用
访问父类成员变量
class Parent {
String message = "父类的消息";
}
class Child extends Parent {
String message = "子类的消息";
public void printMessage() {
System.out.println("子类的message: " + this.message);
System.out.println("父类的message: " + super.message); // 访问父类变量
}
}
public class Test {
public static void main(String[] args) {
Child child = new Child();
child.printMessage();
}
}
输出:
子类的message: 子类的消息
父类的message: 父类的消息
调用父类方法
class Vehicle {
public void run() {
System.out.println("车辆在行驶");
}
public void stop() {
System.out.println("车辆已停止");
}
}
class Car extends Vehicle {
@Override
public void run() {
super.run(); // 调用父类的run方法
System.out.println("汽车在高速行驶");
}
public void emergencyStop() {
System.out.println("紧急刹车!");
super.stop(); // 调用父类的stop方法
}
}
public class Test {
public static void main(String[] args) {
Car car = new Car();
car.run();
System.out.println("---");
car.emergencyStop();
}
}
输出:
车辆在行驶
汽车在高速行驶
---
紧急刹车!
车辆已停止
完整的实际案例
// 员工管理系统案例
class Employee {
protected String name;
protected double salary;
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
public void work() {
System.out.println(name + "正在工作");
}
public double calculateBonus() {
return salary * 0.1; // 默认奖金为工资的10%
}
}
class Manager extends Employee {
private int teamSize;
public Manager(String name, double salary, int teamSize) {
super(name, salary); // 调用父类构造方法
this.teamSize = teamSize;
}
@Override
public void work() {
super.work(); // 调用父类方法
System.out.println(name + "管理着" + teamSize + "人团队");
}
@Override
public double calculateBonus() {
// 使用父类方法计算基础奖金,然后增加管理奖金
double baseBonus = super.calculateBonus(); // 调用父类方法
double managerBonus = teamSize * 1000; // 每人1000元管理奖金
return baseBonus + managerBonus;
}
public void printInfo() {
System.out.println("姓名: " + super.name);
System.out.println("工资: " + super.salary);
System.out.println("管理团队人数: " + teamSize);
}
}
public class Test {
public static void main(String[] args) {
Manager manager = new Manager("张三", 15000, 5);
manager.work();
System.out.println("---");
manager.printInfo();
System.out.println("奖金: " + manager.calculateBonus());
}
}
输出:
张三正在工作
张三管理着5人团队
---
姓名: 张三
工资: 15000.0
管理团队人数: 5
奖金: 6500.0
使用super关键字的注意事项:
- 调用父类构造方法时必须放在子类构造方法的第一行
- 不能同时使用super()和this()调用构造方法
- 如果父类没有无参构造方法,子类必须显式调用父类的有参构造方法
- super不能用于静态方法中
- 当子类和父类有同名成员时,super用于区分
这些案例涵盖了super关键字的主要使用场景,理解这些对Java面向对象编程非常重要。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播