##オーバーライド(推奨学習:java コース)
文字通り、オーバーライドとは、もう一度書き直すという意味です。実際には、親クラスのメソッド自体をサブクラスで書き換えることになります。サブクラスは親クラスの元のメソッドを継承しますが、サブクラスは親クラスのメソッドをそのまま継承したくない場合があるため、メソッド名、パラメータリスト、戻り値の型(サブクラスのメソッドの戻り値を除く)親クラスのメソッドの戻り値がサブクラスと同じである場合)、メソッド本体を変更または書き換えることを書き換えと呼びます。ただし、サブクラス関数のアクセス変更権限を親クラスのアクセス変更権限より低くすることはできないことに注意してください。例:
public class Father { public static void main(String[] args) { // TODO Auto-generated method stub Son s = new Son(); s.sayHello(); } public void sayHello() { System.out.println("Hello"); } } class Son extends Father{ @Override public void sayHello() { // TODO Auto-generated method stub System.out.println("hello by "); } }
Overload
クラス内で、同じ名前のメソッドに異なるパラメータ リストがある場合(異なるパラメーターの種類、異なるパラメーターの数、または異なるパラメーターの順序も) オーバーロードとみなされます。同時に、オーバーロードには戻り値の型に関する要件はありません。戻り値の型は同じでも異なっていても構いませんが、戻り値の型が同じかどうかによってオーバーロードを判断することはできません。例:
public class Father { public static void main(String[] args) { // TODO Auto-generated method stub Father s = new Father(); s.sayHello(); s.sayHello("wintershii"); } public void sayHello() { System.out.println("Hello"); } public void sayHello(String name) { System.out.println("Hello" + " " + name); } }
面接中に次のような質問がされました: オーバーロードとオーバーライドの違いは何ですか?
回答:メソッドのオーバーロードと書き換えはどちらもポリモーフィズムを実現する方法です。違いは、前者はコンパイル時のポリモーフィズムを実装し、後者は実行時のポリモーフィズムを実装することです。
クラス内でオーバーロードが発生します。同じ名前のメソッドに異なるパラメーター リスト (異なるパラメーターの種類、異なる数のパラメーター、またはその両方) がある場合、それはオーバーロードとみなされ、オーバーライドが発生します。サブクラスと親クラスの間でオーバーライドするには、サブクラスのオーバーライドされたメソッドが親クラスのオーバーライドされたメソッドと同じパラメーター リストを持ち、互換性のある戻り値の型を持ち、親クラスのオーバーライドされたメソッドよりもアクセスしやすいことが必要です。親クラスのオーバーライドされたメソッドと比較することはできません。親クラスのオーバーライドされたメソッドは、より多くの例外を宣言します (リスコフ置換原則)。オーバーロードには戻り値の型に特別な要件がなく、戻り値の型に基づいて区別することはできません。
以上がJavaでのオーバーロードと書き換えの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。