J'ai une situation d'héritage de base avec une méthode surchargée dans la super classe.
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");
}
}
Les éléments suivants Employee
étend la classe Person
classe ci-dessus :
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;
}
}
La méthode principale crée simplement un Employee
(à la fois de type statique et dynamique) et appelle .work()
sur elle :
public static void main(String[] args){
Employee e1 = new Employee("Manager1", 1976, "Female");
e1.work();
}
Cela finit par imprimer
This person is not an Employee
En regardant cela, j'avais pensé que puisque le type statique et dynamique de l'objet e1
es Employee
il appellerait la méthode surchargée de Person qui prend une valeur de Employee
en tant que paramètre. Puisque je me trompe clairement à ce sujet, j'ai ouvert un débogueur en supposant que la référence à "ceci" à la ligne getWorkDetail(this)
dans le Person
doit s'être transformée en sa super classe. Cependant, ce n'est pas ce que j'ai trouvé.
Il est clair qu'à ce stade du code this
est un Employee
mais elle a quand même choisi d'exécuter la méthode surchargée getWorkDetail(Person p)
. Quelqu'un peut-il expliquer ce comportement ?
36 votes
IMHO, la classe parent ne devrait rien savoir des classes enfants. Je veux dire par là qu'il n'y a pas de place dans l'architecture de l
Person
classe pourgetWorkDetail(Employee e)
méthode...1 votes
@zlakad Je pense que ces fonctions étaient censées être statiques ?
0 votes
@StarWeaver, statique ou non, quelle est la différence dans cette question particulière ?
12 votes
this
dans la classePerson
est de type statiquePerson
.2 votes
Comme @zlakad y fait allusion, cette structure de classe est mal formée.
this
est une méthode implicite non statique. Cela n'a pas vraiment de sens de passerthis
à une méthode de membre ici.