ICT関連の学習備忘録

ICTの学習をアウトプットするワークブックサイト

ICT関連の学習備忘録

2019/09/18:Java基礎(クラスの利用・コンストラクタ)

クラスの利用

class Car
{
	int num;    #Carクラスの宣言(仕様)
	double gas; 
}

class Sample2
{
	public static void main(String[] args)
	{
		Car car1;           #オブジェクトを作成
		car1 = new Car();   #※インスタンス化
		
		car1.num = 1234;    #クラスの宣言で指定した
		car1.gas = 20.5;    #変数に値を代入する。
			
		System.out.println("車のナンバーは" + num + "です。");
		System.out.println("ガソリン量" + gas + "です。");
	}
	}
}

クラスメンバ(カプセル化)

クラスの中にデータ(フィールド)と機能(メソッド)をひとまとめにし、
保護したいメンバにprivateをつけて勝手にアクセス出来なくする機能を
カプセル化(encapsulation)と言い、クラス間のアクセスを許可するしない
をクラスメンバで設定が出来る。
class Car
{
	private int num = 10;
	private double gas =20.3;
	
	public void setNumGas(int n, double g)
	{
		if ( g > 0 && g < 1000){
			num = n;
			gas = g;
			System.out.println("ナンバーを" + num + "にガソリン量を"
				+ gas + "にしました。");
		}else{
			System.out.println(g + "は正しいガソリン量ではありません");
			System.out.println("ガソリン量を変更出来ませんでした。\n");
		}
	}	
	public void show()
	{
		System.out.println("車のナンバーは" + num + "です。");
		System.out.println("ガソリン量" + gas + "です。\n");
	}
}

class Sample2
{
	public static void main(String[] args)
	{
		Car car1 = new Car();
		car1.setNumGas(7777,35.4);
		
		car1.show();
		
		System.out.println("正しくないガソリン量(-10.0)を指定してみます。");
		car1.setNumGas(1111,-29);
		car1.show();
	}
}

オーバーロード(多重定義)

同じクラスの中に、同じ名前をもつメソッドを複数定義する事が出来き、
これをメソッドのオーバーロードという。
ただし、オメソッドをオーバーロードするときには、書くメソッドの
引数の型・個数が異なるようにしなければならない。

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

class Sample3
{
	public static void main(String[] args)
	{
		Car car1 = new Car();
		
		car1.setCar(1234,20.5);
		car1.show();
		
		System.out.println("車のナンバーだけ変更します。");
		car1.setCar(2222);
		car1.show();
		
		System.out.println("ガソリン量だけ変更します。");
		car1.setCar(11.1);
		car1.show();
	}
}

コンストラクタの基本

コンストラクタはクラス名と同一のメソッドであり、
コンストラクタは明示的に呼び出すことは出来ない特殊なメソッドである。
そのクラスのオブジェクトが作成された時( new class() 等)に定義しておいた
コンストラクタ内の処理が自動的に行われる。
そのため、オブジェクトのメンバに自動的に初期値を設定する際に用いる。

構文
修飾子 クラス名(引数リスト)
{
文;
・・・
}
class Car
{
	private int num;
	private double gas;
	
	public Car(){
		num = 0;
		gas = 0;
		System.out.println("車を作成しました。");
	}
	
	public void show()
	{
		System.out.println("車のナンバーは" + num + "です。");
		System.out.println("ガソリン量は" + gas + "です。");
	}
}

class Sample4
{
	public static void main(String[] args)
	{
		Car car1 = new Car();
		
		car1.show();
	}
}

#実行
C:\YJSample\09>java Sample4
車を作成しました。
車のナンバーは0です。
ガソリン量は0.0です。

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

メソッド同様にコンストラクタも引数の数、型が異なっていれば
オーバーロードをすることが出来、複数のコンストラクタを定義する事が可能。
class Car
{
	private int num;
	private double gas;

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

	public Car(int n, double g)
	{
		num = n;
		gas = g;
		System.out.println("ナンバー" + num + "ガソリン量" + gas
			+ "の車を作成しました。");
	}
	public void show()
	{
		System.out.println("車のナンバーは" + num + "です。");
		System.out.println("ガソリン量は" + gas + "です。");
	}
}

コンストラクタの省略(デフォルトコンストラクタ)

クラス内にコンストラクタを一つも定義しなかった場合には、
オブジェクトを作成した時に、引数のないコンストラクタが用意され
自動的に呼び出される事になっている。
この引数のないコンストラクタをデフォルトコンストラクタという。
また、デフォルトコンストラクタを記述せず引数有りのコンストラクタを
指定する場合は、デフォルトコンストラクタの省略が効かなくなる為、
オーバーロードする際には必ず、引数の無いコンストラクタを用意する




前のページへ戻る