キーワード辞典
物凄く乱暴なJava for全商1級+

登録日 14/09/10  更新日 16/10/25



物凄く乱暴なJavaに関する用語(オブジェクト的なこと)

詳しくは公式マニュアルをお読みください。
Javaって、こんな風にも書ける、とか、こうとも言う、とか、色々有るので、 以下は雰囲気だけのざっくりとした説明です。
作成中です。ミス有ったら後免。


抽象クラス


抽象クラス

自身が実体化するのではなく、サブクラスのひな形とする様なクラス。
抽象クラスは、実体化出来ない。
抽象化されたメソッドは、必ずサブクラスで定義が必要となる。
大きなプログラムを複数人で手分けして作成する様な場合に便利な模様。

ポリモーフィズムの項の扉を開けるサンプルプログラムでは、 kihonクラスは、kihidoクラスやhirakidoクラスに継承させることが前提になっているクラスで、 kihonクラス自体が実体化される事は無い。 そこで、kihonクラスを抽象クラスにすることで、 プログラムミスによる誤動作を防ぐとともに、 サブクラスとの見通しを良くすることが期待出来る。


昔書いたのを引っ張り出して抜粋した、呆れかえるほど手抜きなサンプルプログラム。

その1
かなり無理矢理な、扉の例のサンプルプログラム
今回は動作確認なので、あくまでもシンプルにしてあります。
pushDoor() や、rightDoor()、leftDoor() とか upDoor()、downDoor()、など、 共通する色々な動作に対する結果(開く、開かない、壊れる、など)を設定すれば、 アドベンチャーゲームっぽくなるかも。

基本となるドアを定義する抽象クラス
ドアに対する動作は3つの呪文。openSesami() 、closeSesame() 、infoDoor() 。
openSesami()、closeSesame() が抽象メソッドなので、サブクラスで必ず定義しなければならない。
// Kihon_2.java			2013.05.28	by Ryn

abstract public class Kihon_2 {

	protected String name;
	protected String type;
	protected Boolean open = false;

	public Kihon_2(String name) {			// コンストラクタ
		this.name = name;
	}

	abstract public void openSesame();

	abstract public void closeSesame();


	public void infoDoor() {

		if( open )
			System.out.println(name + "の" + type + "は、開いています");
		else
			System.out.println(name + "の" + type + "は、閉じています");
	}
}

引き戸(横にずらして開けるドア)を定義するサブクラス
各クラスの名前以外は、ポリモーフィズムの項の Hikido_1() と同じもの。
// Hikido_2.java			2013.05.28	by Ryn

public class Hikido_2 extends Kihon_2{

	public Hikido_2(String name) {			// コンストラクタ
		super(name);
		type = "引き戸";
	}


	public void openSesame() {					// オーバーライド

		if( ! open ){
			System.out.println(name + "の" + type + "が、右に動いて開きました");
			open = true;
		}else
			System.out.println(name + "の" + type + "は、既に開いています");
	}


	public void closeSesame() {					// オーバーライド

		if( open ){
			System.out.println(name + "の" + type + "が、左に動いて閉まりました");
			open = false;
		}else
			System.out.println(name + "の" + type + "は、既に閉じています");
	}
}

開き戸(手前に引いて開けるドア)を定義するサブクラス
各クラスの名前以外は、ポリモーフィズムの項の Hirakido_1() と同じもの。
// Hirakido_2.java			2013.05.28	by Ryn

public class Hirakido_2 extends Kihon_2{

	public Hirakido_2(String name) {			// コンストラクタ
		super(name);
		type = "開き戸";
	}


	public void openSesame() {					// オーバーライド

		if( ! open ){
			System.out.println(name + "の" + type + "が、手前に動いて開きました");
			open = true;
		}else
			System.out.println(name + "の" + type + "は、既に開いています");
	}


	public void closeSesame() {					// オーバーライド

		if( open ){
			System.out.println(name + "の" + type + "が、向こうに動いて閉まりました");
			open = false;
		}else
			System.out.println(name + "の" + type + "は、既に閉じています");
	}
}

扉をコントロールするクラス
書斎は開き戸、玄関と和室は引き戸。
openSesame() や closeSesame() といった同じ名前のメソッドで、 引き戸、開き戸、それぞれの処理が出来る。
ドアを配列にすると、有難味が増す。
各クラスの名前以外は、ポリモーフィズムの項の Alibaba_1 と同じもの。
import java.util.Scanner;

// Alibaba_2		2013.05.28	by Ryn

public class Alibaba_2 {
 
	public static void main(String[] args) {

		Kihon_2 door[] = new Kihon_2[2];

		door[0] = new Hirakido_2 ("寝室");
		door[1] = new Hikido_2("和室");

		Scanner sc = new Scanner(System.in);

		int command;
		System.out.println("1 = Open Sesame!   2 = Close Sesami!   3 = info   0 = End");

		while(( command = sc.nextInt()) != 0 ) {
			switch(command){
				case 1:
					for (int i = 0 ; i < 2 ; i++)
						door[i].openSesame();
					break;
				case 2:
					for (int i = 0 ; i < 2 ; i++)
						door[i].closeSesame();
					break;
				case 3:
					for (int i = 0 ; i < 2 ; i++)
						door[i].infoDoor();
					break;
				default:
					break;
			}
		}
		sc.close();
		System.out.println("終了");
	}
}






[ 黒板消しとチョーク受けの画像 ]