Java super关键字案例怎么用

wen java案例 30

Java super关键字详解与案例

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

Java 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关键字的注意事项:

  1. 调用父类构造方法时必须放在子类构造方法的第一行
  2. 不能同时使用super()和this()调用构造方法
  3. 如果父类没有无参构造方法,子类必须显式调用父类的有参构造方法
  4. super不能用于静态方法中
  5. 当子类和父类有同名成员时,super用于区分

这些案例涵盖了super关键字的主要使用场景,理解这些对Java面向对象编程非常重要。

抱歉,评论功能暂时关闭!