Javaチュートリアル23-Javaのメソッドリロードとメソッドオーバーライドの違い


メソッドのリロードとメソッドのオーバーライドの違い
  • 1、リロードはコンパイル時に発生し、オーバーライドは実行時に発生する:リロードメソッド呼び出しとその定義のバインディングはコンパイル時に発生するが、オーバーライドメソッド呼び出しとその定義のバインディングは実行時に発生する.
  • 2、静的方法は、1つのクラスが複数の同名の静的方法を有することができることを意味して、リロードすることができる.サブクラスで同じ静的メソッドを宣言しても、親の同じメソッドとは関係なく、静的メソッドを上書きすることはできません.
  • 3、最も基本的な違いは、リロードが同じクラスで完了し、オーバーライドがベースクラスとサブクラスで必要であることです.上書きは、親の継承メソッドについてであり、子クラスは特定の実装を提供します.
  • 4、リロード方法は静的バインディングに使用され、オーバーライド方法は動的バインディングに使用される.
  • 5、パフォーマンス:オーバーライドと比較して、リロードによりパフォーマンスが向上します.上書きメソッドのバインドが実行中に完了したためです.
  • 6、private、finalメソッドは、再ロードできますが、上書きできません.これは、1つのクラスに同じ名前のprivate/finalメソッドが複数あることを意味しますが、サブクラスはベースクラスのprivate/finalメソッドを上書きすることはできません.
  • 7、メソッドの戻り値は、メソッドの再ロードの場合は重要ではなく、同じまたは異なることができます(戻り値が同じ場合、パラメータリストの個数、タイプは同じではありません).ただし、メソッドオーバーライドの場合、オーバーライドメソッドはより具体的な戻りタイプを有することができる.
  • 8、メソッドのリロードを行う場合、パラメータリストは異なるはずです.メソッドオーバーライドのパラメータリストは同じであるべきです.

  • メソッドの再ロードの例:
    //A class for adding upto 5 numbers
    class Sum
    {
        int add(int n1, int n2) 
        {
            return n1+n2;
        }
        int add(int n1, int n2, int n3) 
        {
            return n1+n2+n3;
        }
        int add(int n1, int n2, int n3, int n4) 
        {
            return n1+n2+n3+n4;
        }
        int add(int n1, int n2, int n3, int n4, int n5) 
        {
            return n1+n2+n3+n4+n5;
        }
        public static void main(String args[])
        {
            Sum obj = new Sum();
            System.out.println("Sum of two numbers: "+obj.add(20, 21));
            System.out.println("Sum of three numbers: "+obj.add(20, 21, 22));
            System.out.println("Sum of four numbers: "+obj.add(20, 21, 22, 23));
            System.out.println("Sum of five numbers: "+obj.add(20, 21, 22, 23, 24));
        }
    }
    Output:
    
    Sum of two numbers: 41
    Sum of three numbers: 63
    Sum of four numbers: 86
    Sum of five numbers: 110

    ここでは4つのバージョンの同じ方法addがあります.私たちはadd()でこの方法を再ロードした.
    メソッドオーバーライドの例:
    package beginnersbook.com;
    class CarClass
    {
        public int speedLimit() 
        {
            return 100;
        }
    }
    class Ford extends CarClass
    {
        public int speedLimit()
        {
            return 150;
        }
        public static void main(String args[])
        {
            CarClass obj = new Ford();
            int num= obj.speedLimit();
            System.out.println("Speed Limit is: "+num);
        }
    }
    
    Output:
    
    Speed Limit is: 150
    

    ここでspeedLimit()のクラスメソッドFordはクラスCarClassを書き換えるspeedLimit()メソッドである.
    原文住所:
    https://beginnersbook.com/2014/01/difference-between-method-overloading-and-overriding-in-java/