オーバーロードやコンストラクタの勉強

オーバーロードとは、同じ名前のクラスで、同じ名前のメソッドを2以上定義すること。

class Car{
	private int num;
	private double gas;
	
        //引数がint型のメソッド
	public void setCar(int n){
	num = n;
	System.out.println("ナンバーを"+ num +"にしました。");
	}
    //引数がdouble型のメソッド
	public void setCar(double g){
		gas = g;
		System.out.println("ガソリン量を"+ gas +"にしました。");
	}
     //二つの引数のメソッド
	public void setCar(int n, double g){
		num = n;
		gas = g;
		System.out.println("ナンバーを"+ num +"、ガソリン量を"+ gas +"にしました。");
	}
	public void show(){
		System.out.println("車のナンバーは"+ num +"です。");
		System.out.println("ガソリン量は"+ gas +"です。");
	}
}

public class May21n1 {

	public static void main(String[] args) {
		
		Car2 car21 = new Car2();
		
		//引数が2個のメソッドを呼び出し
		car21.setCar(1234, 20.5);
		car21.show();
		
		System.out.println("");
		
		//引数がint型のメソッドを呼び出し
		System.out.println("車のナンバーだけ変更します。");
		car21.setCar(4321);
		car21.show();
		
		System.out.println("");
		
		//引数がdouble型のメソッドを呼び出し
		System.out.println("ガソリン量だけ変更します。");
		car21.setCar(40.5);
		car21.show();

	}

}

出力結果は

ナンバーを1234、ガソリン量を20.5にしました。
車のナンバーは1234です。
ガソリン量は20.5です。

車のナンバーだけ変更します。
ナンバーを4321にしました。
車のナンバーは4321です。
ガソリン量は20.5です。

ガソリン量だけ変更します。
ガソリン量を40.5にしました。
車のナンバーは4321です。
ガソリン量は40.5です。


コンストラクは、たとえば次のように書く

public Car(){
   num = 5555;
   gas = 34.5
   System.out.println("車を作成しました。")
}

上の例ではクラス名はCarだが、そのクラスのオブジェクトが作成された時、自動的に定義していたコンストラクタの処理を行うという機能を持つ。上の例では、

Car car1 = new Car();

のようにオブジェクトが作成された時、自動的にコンストラクタ内の処理(num = 5555とgas = 34.5の代入と、「車を作成しました。」の表示)が行われる。

class Car{
	public int num;
	public double gas;
	
	//コンストラクタの定義
	public Car(){
		num = 5555;
		gas = 34.5;
		System.out.println("車を作成しました。");
	}
	public void show(){
		System.out.println("車のナンバーは"+ num +"です。");
		System.out.println("ガソリン量は"+ gas +"です。");
	}
}

class May21n2 {

	public static void main(String[] args) {
		//オブジェクトの作成
		Car car1 = new Car();
		car1.show();
		
	}

}

出力結果は

車を作成しました。
車のナンバーは5555です。
ガソリン量は34.5です。


コンストラクタが別のコンストラクタを呼び出すこともできる。

class Car{	
	private int num;
	private double gas;
	
	//引数なしのコンストラクタの作成
	public Car(){
		num = 0;
		gas = 0.0;
		System.out.println("車を作成しました。");
	}
	//引数2個のコンストラクタの作成
	public Car(int n, double g){
		this();//引数なしのコンストラクタを呼び出す
		num = n;
		gas = g;
		System.out.println("ナンバーを"+ num +"、ガソリン量を"+ gas +"にしました。");
	}
	public void show(){
		System.out.println("車のナンバーは"+ num +"です。");
		System.out.println("ガソリン量は"+ gas +"です。");
	}
}

class May21n3 {

	public static void main(String[] args) {
		Car car1 = new Car();
		car1.show();
		
		Car car2 = new Car(1234, 20.6);
		car2.show();
	}

}

出力結果は

車を作成しました。
車のナンバーは0です。
ガソリン量は0.0です。
車を作成しました。
ナンバーを1234、ガソリン量を20.6にしました。
車のナンバーは1234です。
ガソリン量は20.6です。

上の場合、this()で引数なしのコンストラクタを呼び出したが、引数が1個の場合はthis(x)、引数が2個の場合はthis(x,y)を指定する。ただしxとyは呼び出したいコンストラクタの引数。
ちなみにthisはコンストラクタ内の先頭に記述しなければならない。