かふか


かふか
計算機の例に戻ります.計算機は、2つの値(左、右)に対してのみ演算(および、avg)を実行できます.しかし、3つの値を演算しなければならない場合は、どうすればいいのでしょうか.まず、次のように3つの入力値を取得する必要があります.
計算機の例
class Calculator{
    int left, right;
      
    public void setOprands(int left, int right){
        this.left = left;
        this.right = right;
    }
      
    public void sum(){
        System.out.println(this.left+this.right);
    }
      
    public void avg(){
        System.out.println((this.left+this.right)/2);
    }
}
  
public class CalculatorDemo4 {
      
    public static void main(String[] args) {
          
        Calculator c1 = new Calculator();
        c1.setOprands(10, 20);
        c1.sum();       
        c1.avg();       
          
        Calculator c2 = new Calculator();
        c2.setOprands(20, 40);
        c2.sum();       
        c2.avg();
    }
  
}
c1.setOprands(10, 20, 30);
このため、既存のsetopprandsメソッドを次のように変更すると、2つの入力値が得られません.
public void setOprands(int left, int right, int third){
    this.left = left;
    this.right = right;
    this.third = third;
}
c1.setOprands2(10, 20);
c1.setOprands3(10, 20, 30);
これも良い方法ですが、パラメータの数によって方法の名前が異なり、簡潔な方法ではないようです.どうすればいいの?コードを見てください.
package com.yuri.javatutorials.overloading.example1;

class Calculator {
	int left, right;
	int third = 0;

	public void setOprands(int left, int right) {
		System.out.println("setOprands(int left, int right)");
		this.left = left;
		this.right = right;
	}

	public void setOprands(int left, int right, int third) {
		System.out.println("setOprands(int left, int right, int third)");
		this.left = left;
		this.right = right;
		this.third = third;
	}

	public void sum() {
		System.out.println(this.left + this.right + this.third);
	}

	public void avg() {
		System.out.println((this.left + this.right + this.third) / 3);
	}
}

public class CalculatorDemo {

	public static void main(String[] args) {

		Calculator c1 = new Calculator();
		c1.setOprands(10, 20);
		c1.sum();
		c1.avg();
		c1.setOprands(10, 20, 30);
		c1.sum();
		c1.avg();

	}

}

/*

setOprands(int left, int right)
30
10
setOprands(int left, int right, int third)
60
20

*/
同じ名前ですが、フラグは、他のメソッドを重複メソッドとして宣言してメソッドオーバーロードと呼ぶことができます.同じ名前、異なるパラメータ
オーバーロードルール
要するに、メソッドはパラメータをオーバーロードします.つまり,パラメータが異なると,名称が同じであっても異なる方法となる.逆に、パラメータが同じで、戻りタイプが異なる場合はエラーが発生します.
package com.yuri.javatutorials.overloading.example1;

public class OverloadingDemo {
	void A() {
		System.out.println("void A()");
	}

	void A(int arg1) {
		System.out.println("void A (int arg1)");
	}

	void A(String arg1) {
		System.out.println("void A (String arg1)");
	}

	int A() {
		System.out.println("void A()");
	}

	public static void main(String[] args) {
		OverloadingDemo od = new OverloadingDemo();
		od.A();
		od.A(1);
		od.A("coding everybody");
	}
}
パラメータが存在しない2つの方法を定義した.1つのreturn値はvoidであり、1つのreturn値はintである.
パラメータの数は同じですが、パラメータのデータ型が異なる場合はオーバーロードできます.Javaはメソッドを呼び出すときに渡されるパラメータのデータ型に基づいて呼び出すメソッドを判断できるからです.ただし,メソッドの戻り値はメソッド呼び出し時に伝達できない情報であるため,過負荷のターゲットにはならない.
継承とオーバーロード
package com.yuri.javatutorials.overloading.example1;

public class OverloadingDemo2 extends OverloadingDemo {
	void A(String arg1, String arg2) {
		System.out.println("sub class : void A (String arg1, String arg2)");
	}

	void A() {
		System.out.println("sub class : void A ()");
	}

	public static void main(String[] args) {
		OverloadingDemo2 od = new OverloadingDemo2();
		od.A();
		od.A(1);
		od.A("coding everybody");
		od.A("coding everybody", "coding everybody");

	}
}

/*
sub class : void A ()
void A (int arg1)
void A (String arg1)
sub class : void A (String arg1, String arg2)
*/
クラスOverloadingDemo 2は、OverloadingDemoを継承します.OverloadingDemo 2で定義される方法Aには、文字列をデータ型とする2つのパラメータがある.この形式の変数は、親クラスで定義されていないため、メソッドオーバーロードです.逆に、以下の方法Aにはパラメータがない.また,親クラスには既にパラメータがないメソッドAが存在する.この2つのパラメータの形状は同じなので、オーバーロードではなくオーバーロードです.
overriding VS overloading
誇張と誇張は本当に用語を混同している.もちろんです.重要なのは、過負荷とは何か、過負荷とは何かです.重要なのは、riding(乗る)を使用して親メソッドの操作方法を変更し、loadを使用して同じ名前、異なるパラメータを複数作成する方法を知ることです.これらの概念が混同されているのは,overの共通分母のためである.overを除いて、知っていれば、あまり混同しないはずです.(上書きは歴史的な意味での再定義であることに注意してください.)
この文章は生活コードに基づくjavaチュートリアルのまとめです.