PHASE2 LOG

主にIT関連・ゲームのログ

Javaのお勉強~デフォルトコンストラクタ・コピーコンストラクタ~

      2016/03/12

今回はコンストラクタのお勉強の続きです。

飲み会だったり遊んだりでかなりお勉強サボってます(;^ω^)

 

デフォルトコンストラクタ

 

コンストラクタを定義していない場合でも、実はコンストラクタは自動的に作られています。

これをデフォルトコンストラクタといいます。

 

実際に記述されていなくても、以下のように空のコンストラクタが

定義されているというわけです。

 

class Test{
	
	//デフォルトコンストラクタ(実際に記述はされていない
	Test(){
	}
}

 

そういうわけで何もコンストラクタを定義していなくても

自動的で作られてはいることを認識しておいたほうが良さそうですね。

 

コピーコンストラクタ

 

同じクラスのオブジェクトを引数として受け取り、フィールドの値をコピーする

コンストラクタをコピーコンストラクタといいます。

 

class Phone{
	String name;
	String maker;
	
	Phone(String n, String m){	//初期化のコンストラクタ
		name = n;
		maker = m;
	}
	
	Phone(Phone copy){	//コピーコンストラクタ
		name = copy.name;
		maker = copy.maker;
	}
	
	void Print(){	//出力メソッド
		System.out.println("名前:" + name + " メーカー:" + maker);
	}
}
public class Const {
	public static void main(String[] args){
		Phone ph1 = new Phone("Xperia UL", "Sony");	//初期化のコンストラクタ
		ph1.Print();
		
		Phone ph2 = new Phone(ph1);	//ph1のフィールドをコピーする
		ph2.Print();
		
		Phone ph3 = new Phone(ph1);
		ph3.name = "Xperia Z3"; //nameをXperiaZ3に変更
		ph3.Print();
	}
}

 

 

コピーコンストラクタを使うと新しく同じようなオブジェクトを生成する際に、

一から初期化せずにそのまま使えちゃうというわけですね。

 

ph2のオブジェクトはph1で定義した内容をそのまま出力しています。

ph3のオブジェクトではph1で定義したnameだけ変えて、makerはコピーしたものを

使っています。

 

イメージ化するとこんな感じです。

copyconst

 

そういうわけでこれを実行すると次のような結果になります。

名前:Xperia UL メーカー:Sony

名前:Xperia UL メーカー:Sony

名前:Xperia Z3 メーカー:Sony

 

今までソース見てもコンストラクタとメモされてる場所がなんのこっちゃ

わかりませんでしたが、これで意味はわかりそうです(笑)

どんどんわかってくると楽しくなりそうですね(´∀`)

 

人気ブログランキング

 -