Javaの知識(29)オーバーライドとリロード

5674 ワード

クラス継承では、子クラスは親から継承されたメソッドを変更できます.つまり、子クラスは親メソッドとは異なる機能を持つメソッドを作成できますが、同じ名前、戻り値タイプ、パラメータリストがあります.新しいクラスにメソッドを定義し、その名前、戻り値のタイプ、パラメータのリストが親クラスとちょうど同じである場合、新しいメソッドは古いメソッドを上書きすると呼ばれます.パラメータリストはパラメータ署名とも呼ばれ、パラメータのタイプ、パラメータの個数、パラメータの順序を含め、1つの違いがあればパラメータリストの違いと呼ばれます.上書きされたメソッドは、サブクラスでsuperによってのみ呼び出されます.注:上書きは親クラスのメソッドを削除するのではなく、子クラスのインスタンスを非表示にし、一時的に使用しません.次の例を見てください.
 1 public class Demo{

 2     public static void main(String[] args) {

 3         Dog myDog = new Dog("  ");

 4         myDog.say();  //              

 5        

 6         Animal myAnmial = new Animal("  ");

 7         myAnmial.say();  //              

 8     }

 9 }

10 class Animal{

11     String name;

12     public Animal(String name){

13         this.name = name;

14     }

15    

16     public void say(){

17         System.out.println("       ,     " + name + ",      ");

18     }

19 }

20 class Dog extends Animal{

21     //          ,  super()  

22     public Dog(String name){

23         super(name);

24     }

25     //   say()   

26     public void say(){

27         System.out.println("      ,     " + name + ",         ");

28     }

29 }

 
運行結果:私は子犬で、私の名前は花と呼ばれて、私はワンワンの鳴き声を出すことができます.私は小動物で、私の名前は貝貝と呼ばれています.私は鳴き声の方法をカバーする原則を出すことができます.
  • 上書きメソッドの戻りタイプ、メソッド名、パラメータリストは、元のメソッドと同じである必要があります.
  • 上書きメソッドは、元のメソッドよりもアクセス性が悪いことはできません(すなわち、アクセス権限の縮小は許可されません).
  • オーバーライド法は、元の方法よりも多くの異常を放出することはできない.
  • が上書きされる方法はfinalタイプではありません.final修飾の方法は上書きできないからです.
  • で上書きされたメソッドはprivateではありません.そうしないと、そのサブクラスでは新しいメソッドが定義されただけで、上書きされません.
  • が上書きされる方法はstaticではありません.親クラスのメソッドが静的で、子クラスのメソッドが静的ではない場合、両方のメソッドが上書き条件を満たしている場合、コンパイルエラーが発生します.逆もまた然り.親クラスと子クラスのメソッドが静的であり、上書き条件を満たしている場合でも、静的メソッドはコンパイル時に静的メソッドとクラスの参照タイプを一致させるため、上書きは発生しません.

  • メソッドのリロード:Javaメソッドのリロードについて前述したように、Java親クラスと子クラスのメソッドがリロードに関与することを強調します.たとえば、親クラスにfunc(){...}というメソッドがあります.サブクラスにはfunc(int i){...}という方法があります.メソッドの重荷を構成します.
    上書きと再ロードの違い:
  • メソッド上書き要求パラメータリストは一致する必要があり、メソッド再ロード要求パラメータリストは一致しない必要があります.
  • メソッドオーバーライド要件は、メソッドのリロードに要求されない戻りタイプが一致する必要があります.
  • メソッドオーバーライドは、同じクラスで使用されるすべてのメソッド(親から継承されたメソッドを含む)を再ロードするサブクラスの親をオーバーライドするメソッドにのみ使用できます.
  • メソッドは、メソッドへのアクセス権と放出された例外を上書きするために特別な要件を有し、メソッドの再ロードにはこの点で制限はありません.
  • 親の1つの方法は、クラスに1回しか上書きできませんが、1つの方法は、すべてのクラスで複数回再ロードできます.

  • シリーズ記事:
    Javaはどのくらい知っていますか(上)

    Javaはどのくらい知っていますか(中)