class Employee {
    private String name;
    private double baseSalary;

    public Employee(String name, double baseSalary) {
        this.name = name;
        this.baseSalary = baseSalary;
    }

    public String getName() {
        return name;
    }

    // Base implementation of computeSalary method
    public double computeSalary() {
        return baseSalary;
    }
}
class Manager extends Employee {
    private double bonus;

    public Manager(String name, double baseSalary, double bonus) {
        super(name, baseSalary);
        this.bonus = bonus;
    }

    // Override computeSalary method to include bonus
    @Override
    public double computeSalary() {
        // Calling the base class method using super
        double baseSalary = super.computeSalary();
        return baseSalary + bonus;
    }
}
public class PolymorphicInvocationExample {
    public static void main(String[] args) {
        // Polymorphic invocation using base class reference
        Employee emp1 = new Employee("John Doe", 50000.0);
        System.out.println("Employee Salary: $" + emp1.computeSalary());

        // Polymorphic invocation using subclass reference
        Employee emp2 = new Manager("Jane Smith", 60000.0, 10000.0);
        System.out.println("Manager Salary: $" + emp2.computeSalary());
    }
}