日曜日も張り切ってJavaの勉強

今日勉強したJavaプログラミングは、
privateとpublicについてとカプセル化、次にオーバーロードについて、そしてコンストラクタの基本です。
なんかプログラムコードがどんどん肥大化してる気がする・・・。


まずはprivateについて。privateはその名の通りプライベートなフィールドやメソッドを作成できる修飾子のこと。つまり、privateの宣言されたクラスの外からprivateのフィールドやらメソッドやらへとアクセスしようとしてもできないということです。

class Car{
	//privateフィールド
	private int num;
	private double gas;
	
	void show(){
		System.out.println("車のナンバーは"+ num +"です。");
		System.out.println("ガソリンの量は"+ gas +"です。");
	}
}

class privateexample {

	public static void main(String[] args) {
		Car car1 = new Car();
		
        //privateのフィールドへアクセスできない
		//car1.num = 1234; 
		//car1.gas = 20.5;
		
		//show()メソッドを呼び出して出力する
		car1.show();
	}

}

実行結果は

車のナンバーは0です。
ガソリンの量は0.0です。

numやgasに何の値も代入されてないので0が返されてます。
ちなみに「//privateのフィールドへアクセスできない」の下のコードを//で表示されないようにしておかないとエラーがでてしまいコンパイルができません。


次はpublicについて。publicはprivateの逆にクラスの外からでも使用可能で、privateがついたフィールドなどでもクラスの外で使用可能にしてくれるという使い方もあります。

class Car{
        //privateフィールド
	private int num;
	private double gas;
	
	public void setNumGas(int n, double g){
		num = n;
		gas = g;
		System.out.println("車のナンバーを"+ num +"、ガソリン量を"
				+ gas +"にしました。");
	}
	public void show(){
		System.out.println("車のナンバーは"+ num +"です。");
		System.out.println("ガソリン量は"+ gas +"です。");
	}
}

class Publicexample {

	public static void main(String[] args) {
                //オブジェクトを作成し・・・
		Car car1 = new Car();
          //num,gasに値を代入する
		car1.setNumGas(1234, 20.5);
                //show()メソッドを表示する
		car1.show();
	}

}

実行結果は

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

これでprivateフィールドへクラスの外から値を代入することができました。


なぜprivateやpublicを使うのかというと、実社会ではクラスを宣言する部分とクラスを利用する部分とを違う人が書く場合がよくあるそうで、そういう時に保護したいメンバをprivateをつけて勝手にアクセスすることをできなくする必要があるようです。これをカプセル化といいます。こうすることで、誤りを減らすことができるらしい。


コンストラクタについては次の記事で