まず、私はそのJavaの多相性関数は、それがパラメータインスタンスの型によってマップされています。Java多形性と継承の問題
私の機能がmyFunction(EmployeeImpl emp)
に署名していない理由を説明するのに役立つ人は、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());
}
}
結果:従業員:EmployeeImpl
編集:これはと呼ばれる同じ機能が含まれている20の以上の子供たちのクラスがあり、私の現実のアプリケーション、同じ構造を持つだけのサンプルアプリケーションですcallMyFunction
の場合、この関数には20行以上のコードがあります。だから私はoverride
すべての子供のための同じコードコードでこの機能に非常に難しい仕事です。とにかく、私の将来の機能を変えなければならないとどうなりますか?私は同じコードで20の機能をすべて変更できますか?
これよりも簡単ですか?
あなたは 'EmployeeImplで' callMyFunction'をオーバーライドしていないので'。オーバーロードされたメソッドを呼び出すと、コンパイル時にどのメソッドが使用されるかが決定されます。したがって、実行時にこのクラスがどのように継承されても問題ありません。 – align
@alignがあなたのコメントよりもはるかに優れた動作を説明したため、コメントを編集しています。私はこのコメントを追加します:あなたがしたmain()で何が起こるかを見てください。EmployeeImpl emp = new EmployeeImpl();代わりに – muzzlator
私は自分の機能を無効にする必要がありますか? myfunctionが非常に抱擁のコード量の場合はどうでしょうか?サブクラスでもう一度書き直す必要がありますか? –