Java Constructor


Overloadingについて
オーバーロードとは、複数のパラメータタイプ、個数、順序が異なることを宣言するジェネレータです.
public class ConstructorClass {
	
	String name = "sally";
	String color;
	String job;
	int age;
    
    ConstructorClass() {}
	
	ConstructorClass(String color) {
		this.color = color;
	}
	
	ConstructorClass(String color, String job) {
		this.color = color;
		this.job = job;
	}
	
	ConstructorClass(String color, String job, int age) {
		this.color = color;
		this.job = job;
		this.age = age;
	}
}
Constructor Class(){}と同様に、パラメータのないジェネレータをデフォルトジェネレータと呼びます.基本ジェネレータはコンパイラによって作成され、単独で作成する必要はありません.
上のコードに基づいて、パラメータのないデフォルトジェネレータが作成されます.
これは、パラメータを持つ他のジェネレータを作成する場合、コンパイラはデフォルトのジェネレータを作成しないため、個別に宣言する必要があるためです.
	ConstructorClass(String color) {
		this.color = color;
	}
	
	ConstructorClass(String color, String job) {
		this.color = color;
		this.job = job;
	}
	
	ConstructorClass(String color, String job, int age) {
		this.color = color;
		this.job = job;
		this.age = age;
	}
ConstructorClass(String color)
ConstructorClass(String color, String job)
ConstructorClass(String color, String job, int age)
上のコードから見ると,ジェネレータごとにパラメータタイプ,数が異なるため,オーバーロードが必要である.
過負荷ではなくコードを見てみましょう.
ConstructorClass(int age, String job, String color) {
		this.color = color;
		this.job = job;
		this.age = age;
	}
	

ConstructorClass(int age, String color, String job) {
	    this.color = color;
		this.job = job;
		this.age = age;
	}
上のコードを見ると、パラメータのタイプはint、Stringで、順序は同じで、パラメータの個数も3つ同じです.
String typeはパラメータ名のみ変更しました
オーバーロードの場合、パラメータ名は重要ではありません.
Stringタイプのパラメータ名の順序が異なることは、オーバーロードを意味しません
ConstructorClass(String name, String color) {}

ConstructorClass(String color, String name) {}
上のコードも同じですが、パラメータのタイプと数が同じなので、オーバーロードはありません.
初期化内容が似ているジェネレータは、他のジェネレータthis()を呼び出して解決する重複コードを生成する可能性があります.
ConstructorClass(String color) {
		this(color, null, 0);
	}
	
	ConstructorClass(String color, String job) {
		this(color,job,0);
	}
	
	ConstructorClass(String color, String job, int age) {
		this.color = color;
		this.job = job;
		this.age = age;
	} //공통실행 코드
初期化内容はジェネレータに集中して記入されます.
すなわち、汎用実行コードとして削除する
ConstructorClass(String color, String job, int age) {
		this.color = color;
		this.job = job;
		this.age = age;
	} 
他の生成者は、この呼び出しを使用して汎用実行コードを実行します.
パラメータは、共通実行コードで受信したパラメータに基づいて呼び出されます.
ConstructorClass(String color) {
		this(color, null, 0);
	}
	
	ConstructorClass(String color, String job) {
		this(color,job,0);
	}
これを使用して別のジェネレータを呼び出す場合は、ジェネレータの最初のジェネレータに来なければなりません.
ConstructorClass(String color) {
		System.out.println("color");
		this(color, null, 0);
	}
	
	ConstructorClass(String color, String job) {
    	System.out.println("color, job");
		this(color,job,0);
	}
上のコードのようにthisを呼び出す前に別の実行文を書くとエラーになります
ConstructorClass(String color) {
		this(color, null, 0);
        	System.out.println("color");
	}
	
	ConstructorClass(String color, String job) {
		this(color,job,0);
       		 System.out.println("color, job");
	}
上のコードは問題のないコードです.this呼び出し文はジェネレータの最初の行にあるからです.