今回の練習問題は第4章のインタフェース(4-12)の内容となっています。
examフォルダ内にファイルは保存してください。(階層→c:\work\exam)
インタフェース練習問題
【Java】インタフェース練習問題
以下の指示に従ってプログラミングを行ってください。また、プログラム内にもコメントで指示がありますので、コメントの下にプログラミングを行ってください。examフォルダ内に「Human.java」「ICharacter.java」「Exam1009.java」で保存してください。
保存後、「Exam1009.java」をコンパイルおよび実行を行ってください。
なお、HumanはICharacterを実装して記述して下さい。
指示1 ICharacterインタフェースは以下の表を参考に作成してください
インタフェース名 | ||||
---|---|---|---|---|
ICharacter | ||||
修飾子 | メソッド名 | 戻り値の型 | 引数 | 処理内容 |
public abstract | setName | void | String name | 抽象メソッドの為なし |
public abstract | getName | String | なし | 抽象メソッドの為なし |
public abstract | getType | String | なし | 抽象メソッドの為なし |
public abstract | speedCorrection | void | int value | 抽象メソッドの為なし |
public abstract | printStatus | void | なし | 抽象メソッドの為なし |
※public abstractは記述しなくても自動的に付加されます
指示2 Human.javaは以下のように記述し、コメントを参考にxxxxxxの部分を埋めてください
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
//ICharacterインタフェースを実装するクラス class Human implements ICharacter{ private String name; private String type; private String job; private int speed; /* 各種フィールドを以下のように初期化するコンストラクタ nameは「ななしさん」 speedは「16」 typeは「人間」 jobは「なし」 */ Human(){ xxxxxx xxxxxx xxxxxx xxxxxx } /* ICharacterからの実装を行います メソッドの処理を参考にして適切なメソッドをオーバーライドしてください */ xxxxxx{ name = n; } xxxxxx{ return name; } xxxxxx{ return type; } xxxxxx{ System.out.println("タイプ:" + type); System.out.println("名前:" + name); System.out.println("職業:" + job); System.out.println("走る速度:" + speed + "km/h"); } xxxxxx{ if(n >= -5 && n <= 10) speed = (int)(speed * (1 + (0.1 * n))); } public void setJob(String j){ job = j; } } |
指示3 Exam1009.javaは以下のように記述
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Exam1009{ public static void main(String[] args){ Human nanashi = new Human(); nanashi.speedCorrection(0); nanashi.printStatus(); Human suzuki = new Human(); suzuki.setName("鈴木さん"); suzuki.setJob("陸上選手"); suzuki.speedCorrection(8); suzuki.printStatus(); } } |
実行結果
C:\work\exam>javac Exam1009.java
C:\work\exam>java Exam1009
タイプ:人間
名前:ななしさん
職業:なし
速度:16km/h
タイプ:人間
名前:鈴木さん
職業:陸上選手
速度:28km/h
Human.javaのメソッドxxxxxxの部分を一部紹介します
1 2 3 |
public void setName(String n){ name = n; } |
練習問題の参考図解
練習問題は以下のイメージを元にインタフェースとクラスを作成しています。
HumanクラスはICharacterインタフェースを実装することにより、4つのメソッドの処理を記述しなければなりません。言い換えると、インタフェースで用意された設計(メソッドのシグネチャ)を元にクラスを作成することになります。
インタフェース練習問題 追加
以下の指示に従ってプログラミングを行ってください。また、プログラム内にもコメントで指示がありますので、コメントの下にプログラミングを行ってください。examフォルダ内に「Human.java(作成済み)」「ICharacter.java(新しく作成)」「Exam1009.java(作成済み)」で保存してください。
保存後、「Exam1009.java」をコンパイルおよび実行を行ってください。
なお、HumanはIWearを実装して記述して下さい。
指示1 IWearインタフェースは以下の表を参考に作成してください
インタフェース名 | ||||
---|---|---|---|---|
IWear | ||||
修飾子 | メソッド名 | 戻り値の型 | 引数 | 処理内容 |
public abstract | wearClothes | void | String type | 抽象メソッドの為なし |
public abstract | wearShoes | void | String type | 抽象メソッドの為なし |
public abstract | wearGlasses | void | String type | 抽象メソッドの為なし |
※public abstractは記述しなくても自動的に付加されます
指示2 HumanクラスにIWearインタフェース実装し、以下のようなフィールドと実装メソッドを追加してください
クラス名 | ||||
---|---|---|---|---|
Human | ||||
修飾子 | フィールド名 | 型 | 初期値 | |
private | clothesType | String | なし | |
private | shoesType | String | なし | |
private | glassesType | String | なし | |
修飾子 | メソッド名 | 戻り値の型 | 引数 | 処理内容 |
public | wearClothes | void | String type | 引数で指定された服の種類をclothesTypeフィールドに設定 |
public | wearShoes | void | String type | 引数で指定された靴の情報をshoesTypeフィールドに設定 |
public | wearGlasses | void | String type | 引数で指定された靴の情報をglassesTypeフィールドに設定 |
public | printWear | void | なし | 服、靴、眼鏡のなかで、身に着けているものだけを表示する
全て身に着けている場合の表示例は以下のようになります。 ※それぞれのフィールドは「着物」「下駄」「サングラス」 着物を着ています 下駄を履いています サングラスをかけています |
※printWear()がどのように表示されるかは実行結果を参照のこと
指示3 Exam1009.javaは以下のように追加記述
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class Exam1009{ public static void main(String[] args){ /* 元々の記述(nanashiおよびsuzukiインスタンス)は省略しています。 以下の部分を追加してください */ Human katou = new Human(); katou.setName("加藤さん"); katou.wearClothes("着物"); katou.wearShoes("下駄"); katou.printStatus(); katou.printWear(); } } |
実行結果
C:\work\exam>javac Exam1009.java
C:\work\exam>java Exam1009
タイプ:人間
名前:ななしさん
職業:なし
走る速度:16km/h
タイプ:人間
名前:鈴木さん
職業:陸上選手
走る速度:28km/h
タイプ:人間
名前:加藤さん
職業:なし
走る速度:16km/h
着物を着ています
下駄を履いています
※wearGlasses()メソッドは実行されていない為、「眼鏡をかけています」とは表示されません。
printWear()メソッドの処理(一部)は以下のようになります。
1 2 |
if(clothesType != null) System.out.println(clothesType + "を着ています"); |
練習問題【追加】の問題意図
例えば、今回追加で作成したIWearインタフェースは「服、履物、眼鏡」等を身に着けるメソッドが抽象メソッドとして定義されています。
IWearインタフェースを実装しているクラスは抽象メソッドを実装していますので、言い換えると「服、履物、眼鏡」等を身に着けられることとなります。
さらに、IWearインタフェースを実装していないクラスでは「服、履物、眼鏡」等を身に着けることができないという意味を持たせることもできます。
以下は図解での例です。
HumanクラスではIWearを実装していることから「服、履物、眼鏡」等を身に着けられること分かります。
しかし、Catクラス(作成していない)ではIWearは実装していない為、「服、履物、眼鏡」等を身に着けられないことが分かります。
インタフェースを自身で作成すると分かりずらいかもしれませんが、既存のインタフェースやそれを実装しているクラスを利用すると、そのメリットにも段々理解できるようになります。(第5章の記事で紹介)