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

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



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

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


サブクラスとオーバーライド


サブクラス
既にあるクラスを基にして(継承)、作成されたクラス。
基本となるクラスを作成し、そこから、違う部分だけを記述したサブクラスを作成することで、 効率的なプログラミングが出来る。
class クラス名 extends 基にするクラス名


スーパークラス
サブクラスに対して、基にしたクラスを、こう呼ぶ。


オーバーライド
サブクラスにおいて、 スーパークラスで既に定義してあるメソッドを、同じ名前のまま違う処理に定義し直すこと。
1つのスーパークラスから継承された複数のサブクラスにおいて、 各サブクラスでメソッドをオーバーライドすることにより、 同じメソッドの名前で、対象となるクラスの違いにより、異なる処理をさせることが出来る。
自販機の例では、購入する商品は、ペットボトルのジュースだったりカップ式のジュースだったりするが、 購入者にとっては、お金を投入しボタンを押すという手続きは変わらない、ということ。 或いは、ロールプレイングゲームのキャラクタにおいて、 「戦え」というコマンドは同じだが、戦士は剣を使い、魔法使いは魔法をかける、など、 異なる行動をさせるという様なこと。

コンストラクタの場合、 コンストラクタの名前はクラスの名前に依存するために、違う名前になるが、 オーバーライドが出来る。

super
サブクラスのコンストラクタやオーバーライドしたメソッドで使用する事により、 スーパークラスの対応するコンストラクタやメソッドを明示的に呼び出す時に使用する。


this
自分自身であることを明示する時に使用する。




とある和菓子屋の比較見積もり(?)プログラム。その3。
クラスの関係や値の受け渡しを確認する為のプログラムなので、値引きなどの付随処理は省略。
Menuクラス。
privateがprotectedに変わっている。
//Menu.java (3c)		2016.10.13	by Ryn

public class Menu {

	protected String name;
	protected int tanka;

	public Menu(String name, int tanka) {				// コンストラクタ
		this.name = name;
		this.tanka = tanka;
	}

	protected float calcPayment(int suryo) {
		return tanka * suryo * (float)1.08;
	}

	public void dispData(int suryo) {
		System.out.print(String.format("%-20s @%,5d円 %4d個",name, tanka, suryo));
		System.out.println(String.format(" %,8d円(税込)", (int)calcPayment(suryo)));
		System.out.println();
	}
}
BoxMenuクラス。
10個ごとに、箱に詰める。端数は、Menuクラスで計算する。
箱代は100円。
// BoxMenu.java (3c)		2016.10.13	by Ryn

final public class BoxMenu extends Menu{					// サブクラス

	int boxTanka;
	final private int kosu = 10;
	final private int hakodai = 100;
	
	public BoxMenu(String name, int tanka) {				// コンストラクタ
		super(name, tanka);
		boxTanka = tanka * kosu + hakodai;
	}

	protected float calcPayment(int box) {					// オーバーライド
		return boxTanka * box * (float)1.08;
	}

	public void dispData(int suryo) {								// オーバーライド

		int box = suryo / kosu;
		int hasu = suryo % kosu;

		// 箱詰めの分
		System.out.print(String.format("%-20s @%,5d円 %4d個",
																								name + "[BOX]", boxTanka, box));
		System.out.println(String.format(" %,8d円(箱代・税込)",
																								(int)calcPayment(box)));

		// 端数の分
		System.out.print(String.format("%-20s @%,5d円 %4d個",
																								name, tanka, hasu));
		System.out.println(String.format(" %,8d円(税込)",
																								(int)super.calcPayment(hasu)));
		System.out.println();
	}
}

コマンドラインから数量を入力する。
和菓子を10個考えるのは面倒なので、とりあえず2個。
//Sweets.java (3c)		2016.10.13	by Ryn

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

		Menu a[] = new Menu[4];

		a[0] = new Menu("饅頭", 350);
		a[1] = new BoxMenu("饅頭", 350);
		a[2] = new Menu("羊羹", 500);
		a[3] = new BoxMenu("羊羹", 500);

		try{
			if(args.length == 1){
				int suryo = Integer.parseInt(args[0]);

				for(int i = 0; i < a.length; i++)
						a[i].dispData(suryo);
			}
			else
				System.out.println("引数エラー!");
		}
		catch(NumberFormatException e2){
			System.out.println("数字じゃない!");
		}
	}
}






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