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());
}
}