1. インヘリタンスとは


演習 1-1 (個人): テキストのソース1〜4を実行してインヘリタンスを試してみましょう。

結果:

りんご美味い
みかん美味い

フォルダ「OELM_1_1」を新規作成し、その中に移動します
フォルダ「OELM_1_1」の中に FRUIT.java、 APPLE.java、 ORANGE.java、Main.java (ページ1のソース1〜4)を作成します。
コンパイルして実行します。
指定場所に「実行結果」を記入して下さい。


2. フィールドとメソッドの再利用


演習 1-2 (個人): テキストのソース1〜5を実行してフィールドとメソッドの再利用を試してみましょう。

結果:

りんごマズイ
みかんマズイ

フォルダ「OELM_1_2」を新規作成し、その中に移動します
フォルダ「OELM_1_2」の中に FRUIT.java、 APPLE.java、 ORANGE.java、Main.java (ページ2のソース1〜4)を作成します。
コンパイルして実行し、表示結果を確認します。
FRUIT クラスの eat メソッドの中身をソース 5 の内容に置き換えます。
コンパイルして実行し、表示結果を確認します。
指定場所に「実行結果」を記入して下さい。


演習 1-3 (個人): オブジェクト指向プログラミングの基礎の演習 1-14(OBSC_1_14)で使った Score クラスをスーパークラスとし、フィールドとメソッドの再利用を試してみましょう。

仕様:  

Score クラスをスーパークラスとする Taro クラスと Hanako クラスをつくって利用する
Taro クラスと Hanako クラスの中身は空

結果:

引数なしコンストラクタ実行
引数なしコンストラクタ実行
太郎: math = 53 english = 49 平均 = 51.0
花子: math = 69 english = 8 平均 = 38.5

※ 乱数を使っているので、実行するたびに結果が変わります

フォルダ「OELM_1_3」を新規作成し、その中に移動します。
「OBSC_1_14」の Score.javaをコピーします。
フォルダ「OELM_1_3」の中にTaro.java を新規作成し、Score スーパークラスを継承した Taro クラスを定義して下さい(クラスの中身は空) 。
Hanako.java を新規作成し、Score スーパークラスを継承した Hanako クラスを定義して下さい(クラスの中身は空) 。
Main.java を新規作成し、以下のソースコードを貼り付けてください。

public class Main{

	public static void main(String[] args) {

		Taro taro = new Taro();  // Score クラスでなくて Taro クラスのインスタンスを作成
                Hanako hanako = new Hanako(); // 同様に Hanako クラスのインスタンスを作成

                System.out.println( "太郎: math = " + taro.math+ " english = " + taro.english + " 平均 = " +taro.average());
                System.out.println( "花子: math = " + hanako.math+ " english = " + hanako.english + " 平均 = " +hanako.average());
	}
}

コンパイルして実行します。Taro と Hanako クラスの中身が空なのにちゃんと動作していることを確認して下さい。
指定場所に「Score、Taro、Hanako クラスのソースコード」と「実行結果」を記入して下さい。


演習 1-4 (個人): 演習 1-3 を仕様変更し、Score スーバークラスに name フィールドを追加してみましょう。

仕様:

String型の name フィールドを Score クラスに追加する
Taro クラスのコンストラクタで name に "たろう" を代入する
Hanako クラスのコンストラクタで name に "はなこ" を代入する
Main メソッドの表示部で name の値を表示する

結果:

引数なしコンストラクタ実行
引数なしコンストラクタ実行
name = たろう math = 54 english = 82 平均 = 68.0
name = はなこ math = 51 english = 12 平均 = 31.5

※ 乱数を使っているので、実行するたびに結果が変わります

「OELM_1_3」をフォルダ「OELM_1_4」に丸ごとコピーし、その中に移動します。
Score クラスに public String name; というフィールドを追加して下さい。
Taro クラスに引数無しコンストラクタ Taro() を追加し、そのコンストラクタ内で name に文字列 "たろう" を代入して下さい。
同様に Hanako クラスに引数無しコンストラクタ Hanako() を追加し、そのコンストラクタ内で name に文字列 "はなこ" を代入して下さい。
Main クラスを以下に置き換えて下さい(名前表示のところで name を使う様に変更しています)。

public class Main{

	public static void main(String[] args) {

		Taro taro = new Taro();  // Score クラスでなくて Taro クラスのインスタンスを作成
                Hanako hanako = new Hanako(); // 同様に Hanako クラスのインスタンスを作成

                System.out.println( "name = " + taro.name + " math = " + taro.math+ " english = " + taro.english + " 平均 = " +taro.average());
                System.out.println( "name = " + hanako.name + " math = " + hanako.math+ " english = " + hanako.english + " 平均 = " +hanako.average());

	}
}

コンパイルして実行します。名前がひらがなになっていることを確認して下さい。
指定場所に「Score、Taro、Hanako クラスのソースコード」と「実行結果」を記入して下さい。


演習 1-5 (個人): 次に Score スーバークラスに math と english の合計点を返す total メソッドを追加してみましょう。

仕様:

Score スーバークラスに math と english の合計点を返す total メソッドを追加する
Main メソッドから total メソッドを呼び出す

結果:

引数なしコンストラクタ実行
引数なしコンストラクタ実行
name = たろう math = 26 english = 21 平均 = 23.5 合計 = 47
name = はなこ math = 22 english = 16 平均 = 19.0 合計 = 38

※ 乱数を使っているので、実行するたびに結果が変わります

「OELM_1_4」をフォルダ「OELM_1_5」に丸ごとコピーし、その中に移動します。
Score クラスに public int total() というメソッドを追加して下さい。
追加した total メソッドの中で math と english を合計値を return して下さい。
Main クラスを以下に置き換えて下さい( total メソッドも呼び出す様に変更しています)。

public class Main{

	public static void main(String[] args) {

		Taro taro = new Taro();  // Score クラスでなくて Taro クラスのインスタンスを作成
                Hanako hanako = new Hanako(); // 同様に Hanako クラスのインスタンスを作成

                System.out.println( "name = " + taro.name + " math = " + taro.math+ " english = " + taro.english + " 平均 = " +taro.average() + " 合計 = " +taro.total() );
                System.out.println( "name = " + hanako.name + " math = " + hanako.math+ " english = " + hanako.english + " 平均 = " + hanako.average()+ " 合計 = " + hanako.total());

	}
}

コンパイルして実行します。Taro クラスと Hanako クラスで total メソッドは定義されていないのに 合計点が表示されていることを確認して下さい。
指定場所に「Score クラスのソースコード」と「実行結果」を記入して下さい。


3. オーバライド


演習 1-6 (個人): taro と hanako を Score クラスのインスタンス扱いにして実行してみましょう。

仕様:

taro と hanako を Score クラスのインスタンスにする

結果:

引数なしコンストラクタ実行
引数なしコンストラクタ実行
name = たろう math = 28 english = 46 平均 = 37.0 合計 = 74
name = はなこ math = 14 english = 21 平均 = 17.5 合計 = 35

※ 乱数を使っているので、実行するたびに結果が変わります

フォルダ「OELM_1_5」をフォルダ「OELM_1_6」に丸ごとコピーし、その中に移動します。
Main.java を開き、taro と hanako を Score クラスのインスタンスにします
実行します。
指定場所に「Main クラスのソースコード」と「実行結果」を記入して下さい。


演習 1-7 (個人): オーバライド機能を使ってみましょう

仕様:

HANAKO クラスで total メソッドをオーバライドして合計点を本来の2倍にする
TARO クラスはそのまま

結果:

引数なしコンストラクタ実行
引数なしコンストラクタ実行
name = たろう math = 3 english = 8 平均 = 5.5 合計 = 11
name = はなこ math = 40 english = 10 平均 = 26.5 合計 = 100

※ 乱数を使っているので、実行するたびに結果が変わります

フォルダ「OELM_1_6」をフォルダ「OELM_1_7」に丸ごとコピーし、その中に移動します。
Hanako.java を開き、total メソッドをオーバライドして合計点の 2 倍を return するようにして下さい。
実行します。
指定場所に「Hanako クラスのソースコード」「実行結果」を記入して下さい。


演習 1-8 (個人): オーバライドとリストを組み合わせて使ってみましょう。

仕様:  

Score 型のリスト list を作成し、Taro と Hanako のインスタンスをリストに加える
forEach とラムダ式を使ってリストに登録されているインスタンスの情報を表示する

結果:

引数なしコンストラクタ実行
引数なしコンストラクタ実行
name = たろう math = 3 english = 8 平均 = 5.5 合計 = 11
name = はなこ math = 40 english = 10 平均 = 26.5 合計 = 100

※ 乱数を使っているので、実行するたびに結果が変わります

フォルダ「OELM_1_7」をフォルダ「OELM_1_8」に丸ごとコピーし、その中に移動します。
Main.java を開き、以下の内容に置き換えてください。

import java.util.ArrayList;

public class Main{

	public static void main(String[] args) {

            ArrayList<Score> list = ?
            list.add( ? );
            list.add( ? );

            list.forEach( i ->
                System.out.println( "name = " + ?.name + " math = " + ?.math+ " english = " + ?.english + " 平均 = " +?.average() + " 合計 = " +?.total() )
                );
	}
}

ページ3のソース 8 及び forEachとラムダ式を参考に ? の部分を正しいコードに置き換えてください。
実行します。
指定場所に「Main クラスのソースコード」と「実行結果」を記入して下さい。