У меня есть базовая ситуация наследования с перегруженным методом в суперклассе.
public class Person {
private String name;
private int dob;
private String gender;
public Person(String theName, int birth, String sex){
name = theName;
dob = birth;
gender = sex;
}
public void work(){
getWorkDetail(this);
}
public void getWorkDetail(Employee e){
System.out.println("This person is an Employee");
}
public void getWorkDetail(Person p){
System.out.println("This person is not an Employee");
}
}
Следующий класс Employee расширяет класс Person выше:
public class Employee extends Person {
String department;
double salary;
public Employee(String theName, int birth, String sex){
super(theName, birth, sex);
department = "Not assigned";
salary = 30000;
}
}
Основной метод просто создает объект Employee (как статический, так и динамический) и вызывает на нем функции .work():
public static void main(String[] args){
Employee e1 = new Employee("Manager1", 1976, "Female");
e1.work();
}
Это заканчивается печатью
This person is not an Employee
Просматривая это, я подумал, что поскольку статический и динамический тип объекта e1 является Employee он вызывает перегруженный метод в Person, который принимает Employee в качестве параметра. Поскольку я явно ошибаюсь в этом, я открыл отладчик, предполагая, что ссылка на "this" в строке getWorkDetail(this) в классе Person должна была превратиться в суперкласс. Однако это не то, что я нашел.
Очевидно, что в этот момент кода this объект Employee, однако он все же решил выполнить перегруженный метод getWorkDetail(Person p). Может ли кто-нибудь объяснить это поведение?
