オブジェクト指向、継承の基本問題。

Q1
Wiiを表すクラス、
WiiUを表すクラスを作成し
各操作ができるプログラムを作成する。

■クラス:Wii

<フィールド>
・id(シリアル番号)

<コンストラクタ>
・シリアル番号を設定する

<メソッド>
public void playOnTV(){}
public void checkId(){}

■クラス:WiiU(スーパークラス:Wii)

<メソッド>
public void playOnGamepad(){}

■アプリケーションクラス

まず、WiiとWiiUのインスタンスを一つずつ作成する、
その後、メニューにて操作を選択させる。
詳しくは実行例参考のこと

[実行例]

1.Wiiで遊ぶ,2.WiiUで遊ぶ,3.終わり>1
1.シリアル確認,2.TVで遊ぶ,3.quit>1
SerialID:100
1.シリアル確認,2.TVで遊ぶ,3.quit>2
TVで遊びます。
1.シリアル確認,2.TVで遊ぶ,3.quit>3
Wiiを置いた。
1.Wiiで遊ぶ,2.WiiUで遊ぶ,3.終わり>2
1.シリアル確認,2.TVで遊ぶ,3.Gamepadで遊ぶ,4.quit>1
SerialID:200
1.シリアル確認,2.TVで遊ぶ,3.Gamepadで遊ぶ,4.quit>2
TVで遊びます。
1.シリアル確認,2.TVで遊ぶ,3.Gamepadで遊ぶ,4.quit>3
Gamepadで遊びます
1.シリアル確認,2.TVで遊ぶ,3.Gamepadで遊ぶ,4.quit>4
WiiUを置いた。
1.Wiiで遊ぶ,2.WiiUで遊ぶ,3.終わり>3
アプリケーション終了

一般クラス

public class Wii {
	protected int id;
	public Wii(int id){
		this.id=id;
	}
	public void playOnTV(){
		System.out.println("TVで遊びます。");
	}
	public void checkId(){
		System.out.println("SerialID:"+this.id);
	}
}
class WiiU extends Wii{
	public WiiU(int id) {
		super(id);
	}
	public void playOnGamepad(){
		System.out.println("Gamepadで遊びます");
	}
}

アプリケーションクラス

import java.util.Scanner;
public class WiiApp {
	private static Wii wii = new Wii(100);
	private static WiiU wiiU = new WiiU(200);
	private static Scanner s = new Scanner(System.in);

	public static void main(String[] args) {
		while (true) {
			System.out.print("1.Wiiで遊ぶ,2.WiiUで遊ぶ,3.終わり>");
			int select = s.nextInt();
			switch (select) {
			case 1:
				playWii();
				break;
			case 2:
				playWiiU();
				break;
			case 3:
				System.out.println("アプリケーション終了");
				s.close();
				return;
			}
		}
	}
	private static void playWii() {
		while (true) {
			System.out.print("1.シリアル確認,2.TVで遊ぶ,3.quit>");
			int select = s.nextInt();
			switch (select) {
			case 1:
				wii.checkId();
				break;
			case 2:
				wii.playOnTV();
				break;
			case 3:
				System.out.println("Wiiを置いた。");
				return;
			}
		}
	}
	private static void playWiiU() {
		while (true) {
			System.out.print("1.シリアル確認,2.TVで遊ぶ,3.Gamepadで遊ぶ,4.quit>");
			int select = s.nextInt();
			switch (select) {
			case 1:
				wiiU.checkId();
				break;
			case 2:
				wiiU.playOnTV();
				break;
			case 3:
				wiiU.playOnGamepad();
				break;
			case 4:
				System.out.println("WiiUを置いた。");
				return;
			}
		}
	}
}

(別解)アプリケーションクラス[ラベル付きbreak]

import java.util.Scanner;
public class WIiApp {
	public static void main(String[] args) {
		Wii wii=new Wii(100);
		WiiU wiiU=new WiiU(200);
		Scanner s=new Scanner(System.in);
		while(true){
			System.out.print("1.Wiiで遊ぶ,2.WiiUで遊ぶ,3.終わり>");
			int select=s.nextInt();
			switch(select){
			case 1:
				outer1:
				while(true){
					System.out.print("1.シリアル確認,2.TVで遊ぶ,3.quit>");
					select=s.nextInt();
					switch(select){
					case 1:
						wii.checkId();
						break;
					case 2:
						wii.playOnTV();
						break;
					case 3:
						System.out.println("Wiiを置いた。");
						break outer1;
					}
				}
				break;
			case 2:
				outer2:
					while(true){
						System.out.print("1.シリアル確認,2.TVで遊ぶ,3.Gamepadで遊ぶ,4.quit>");
						select=s.nextInt();
						switch(select){
						case 1:
							wiiU.checkId();
							break;
						case 2:
							wiiU.playOnTV();
							break;
						case 3:
							wiiU.playOnGamepad();
							break;
						case 4:
							System.out.println("WiiUを置いた。");
							break outer2;
						}
					}
				break;
			case 3:
				System.out.println("アプリケーション終了");
				s.close();
				return;		
			}
		}
	}
}