Javaでは、多型は2つのタイプに分かれています:コンパイル時間多型(過負荷)とランタイム多型(上書き)。編集時間の多型は事前拘束とも呼ばれ、ランタイム多型は拘束後とも呼ばれます。
これが例です:
public class overloadandoverwrite {public static void main(string [] args){a1 = new a(); a2 = new b(); b b = new b(); c c = new c(); d d = new d(); System.out.print( "a1.print(a1):"); a1.print(a1); // output aおよびa system.out.print( "a1.print(b):"); a1.print(b); // output a and a:理由は、aにパラメーターbのメソッドがないため、パラメーターaを持つメソッドはsystem.out.print( "a1.print(c):"); a1.print(c); // output a and a:理由は、aにパラメーターcを持つ方法がないため、パラメーターaを持つ方法はbから継承され、bはsystem.out.print( "a1.print(d):")から継承されるため、パラメーターaを持つ方法は呼び出されます。 a1.print(d); // output a and d:理由は、aにパラメーターdのメソッドがあるため、パラメーターdを持つメソッドはsystem.out.print( "a2.print(b):")と呼ばれるためです。 a2.print(b); // output b and a:その理由は、エントリがAであるため、最初に、AにパラメーターBの印刷方法があるかどうかを確認します。次に、この方法がBで書き換えられているかどうかをもう一度確認してください。書き換え方法があることがわかります。直接書き換えメソッドsystem.out.print( "a2.print(c):"); a2.print(c); //出力BおよびA:理由は、エントリがAであるためです。最初に、AにパラメーターCの印刷方法があるかどうかを確認します。NOがある場合は、パラメーターBのメソッドがあるかどうかを調べます。CはBから継承され、パラメーターAを印刷方法を検索します。 System.out.print( "a2.print(d):"); a2.print(d); // output a and d:理由は、エントリがAであるためであるため、Aにパラメーターdのメソッドがある場合、この方法がBで書き換えられていないことを確認するため、Aのこの方法の結果は出力です。 System.out.print( "a2.print(a2):"); a2.print(a2); // output b and a;その理由は、a2のタイプがaであるため、Aのパラメーターaを持つ印刷方式が呼び出されるため、a2の右側の新しいものはbであるため、bにはこの方法が採用されているため、system.out.out.print( "b.print(b):"); b.print(b); //出力bおよびb;理由:エントリはBです。したがって、パラメーターBの印刷関数がBに存在するかどうか、および直接出力があるかどうかを確認してください。 system.out.print( "b.print(c):"); b.print(c); //出力bおよびb;理由:エントリはBであるため、パラメーターCを持つ印刷関数がBに存在するかどうかを確認した場合、それが存在しないことがわかった場合、パラメーターBの印刷関数が存在するかどうかがわかります。それが存在することがわかった場合、およびメソッドがCで書き換えられない場合は、直接出力します。注意すべきことの1つは、bがAから継承するため、パラメーターcを含む印刷方法がAに存在するかどうかを確認する必要があるということです。このようにして、出力の結果はaとc System.out.print( "b.print(d):")になります。 b.print(d); //出力aおよびd;理由:エントリはBです。BにパラメーターDに印刷関数はありませんが、BはAから継承されます。AにパラメーターDを持つ印刷関数があります。したがって、出力はAのパラメーターDの結果です。 }} class A {public void print(a){system.out.println( "a and a"); } public void print(d d){system.out.println( "a and d"); } // public void print(c c)// {// system.out.println( "a and c"); //}} class bはa {public void print(b b){system.out.println( "b and b"); } public void print(a){system.out.println( "b and a"); }} class c拡張b {} class d extends c {}ここで説明する必要があるのは次のとおりです。
a2 = new b();
a2が個別に印刷されている場合、印刷結果は@(ハッシュコード)の代わりにb@(ハッシュコード)ですが、これはa2.print(a2)を呼び出すときにa2のタイプがタイプbであることを意味するものではありません。上記のプログラムでは、出力結果はbとaとaの代わりにaとa(a2がbであると想定される場合、クラスAにパラメーターbを含む印刷方式を呼び出す必要があります。そのような方法はないため、パラメーターaを使用してaとaを出力するメソッドを呼び出す2番目の選択肢は、bはaのサブクラスであるためです)。
上記は、書き換えと過負荷のコード分析の例です。 Javaを勉強している学生に役立つことを願っています。