Erstens ich aber, dass Polymorphismus Funktionen des Java sind es Typen von Parameter-Instanz zugeordnet.java Polymorphismus und Vererbung Probleme
Bitte, jemand zu helfen, zu erklären, warum meine Funktion nicht myFunction(EmployeeImpl emp)
angerufen hat, ist es Instanz EmployeeImpl
.
public class MainApp {
public static void main(String[] args){
Employee emp = new EmployeeImpl();
emp.callMyFunction();
}
}
abstract class Employee{
public void callMyFunction(){
//here is huge amount of code, which all child class has the same
//excepted this line is called to a different function by it instant types.
EmployeeFacade.myFunction(this);
}
}
class EmployeeImpl extends Employee{
}
class EmployeeFacade{
public static void myFunction(Employee emp){
//same data to database
System.out.println("Employee: "+ emp.getClass().getName());
}
public static void myFunction(EmployeeImpl emp){
//same data to database
System.out.println("EmployeeImpl: "+ emp.getClass().getName());
}
}
Ergebnis: Mitarbeiter: EmployeeImpl
Edited: Dies ist nur eine Beispielanwendung, mit der gleichen Struktur wie meine Reality-Anwendung, die mehr als 20 Kinder Klassen hat, die die gleiche Funktion enthält genannt callMyFunction
, diese Funktion hat mehr als 20 Zeilen Code. so ist es eine sehr harte Arbeit für mich, override
diese Funktion mit dem gleichen Code-Code für alle Kinder-Klasse. Wie auch immer, was passiert, wenn ich meine Funktion in der Zukunft ändern muss? Würde ich alle 20 Funktionen mit demselben Code ändern?
Gibt es sowieso einfacher als das?
Weil Sie nicht zwingend 'callMyFunction' im' EmployeeImpl '. Wenn Sie eine überladene Methode aufrufen, wird bei der Kompilierung festgestellt, welche Methode verwendet wird. Also egal wie diese Klasse zur Laufzeit vererbt wird. – align
Kommentar bearbeiten, weil @align das Verhalten erklärt hat, das Sie viel besser als mein Kommentar gesehen haben. Ich werde diesen Kommentar jedoch hinzufügen: Schau, was passieren würde, wenn in main() du getan hättest EmployeeImpl emp = new EmployeeImpl(); stattdessen – muzzlator
Also, muss ich meine Funktion überschreiben? was ist, wenn meine Funktion sehr viel Code ist. Muss ich es nochmal in meiner Unterklasse umschreiben? –