オブジェクト指向の基本問題1-1
問題2-1
従業員を表すEmployeeクラスを作成してください。
Employeeクラスを利用するClassFirstPracticeクラスのmainメソッドはすでに完成しています。
(変更は禁止です)
【Employeeクラス】
Employeeクラスはフィールドとして社員番号(int型)と社員名(String型)の2つの情報を保持します。
Employeeクラスには次の3つのメソッドが必要です。
- 社員番号と社員名をオブジェクトにセットするためのsetDataメソッド
- 社員番号の情報をオブジェクトから取得するためのgetIdメソッド
- 社員名の情報をオブジェクトから取得するためのgetNameメソッド
【実行結果】
社員番号:1234 社員名:山田
【ClassFirstPractice.java】
public class ClassFirstPractice { public static void main(String[] args) { // Employeeクラスのオブジェクトを作成 Employee employee = new Employee(); // Employeeオブジェクトに社員番号と社員名をセット employee.setData(1234, "山田"); // Employeeオブジェクトの社員番号を出力 System.out.println("社員番号:" + employee.getId()); // Employeeオブジェクトの社員名を出力 System.out.println("社員名:" + employee.getName()); } } // ここにEmployeeクラスを作成してください。
問題2-2
ペットを表すPetクラスを作成してください。
Petクラスを使用するClassBasicPracticeクラスのmainメソッドはすでに完成しています。
(変更は禁止です)
【Petクラス】
Petクラスは次の4つのprivateインスタンスフィールドを持ちます。
- 動物の種類を保持するためのtypeフィールド(String型)
- 名前を保持するためのnameフィールド(String型)
- 年齢を保持するためのageフィールド(byte型)
- 性別を保持するためのgenderフィールド(boolean型 ture:メス false:オス)
また、Petクラスは次の5つのpublicメソッドを持ちます。
- 動物の種類を設定するためのsetTypeメソッド
- 名前を設定するためのsetNameメソッド
- 年齢を設定するためのsetAgeメソッド
- 性別を設定するためのsetGenderメソッド
- 紹介文を取得するためのgetIntroductionメソッド
(紹介文の内容は下記の実行結果を参考にしてください)
【実行結果】
犬のコタローはオスで4歳です。 猫のミーはメスで2歳です。
【ClassBasicPractice.java】
public class ClassBasicPractice { public static void main(String[] args) { // 1匹目のペットオブジェクトの生成 Pet pet1 = new Pet(); // 1匹目のペットデータを設定 pet1.setType("犬"); pet1.setName("コタロー"); pet1.setAge((byte)4); pet1.setGender(false); // 2匹目のペットオブジェクトの生成 Pet pet2 = new Pet(); // 2匹目のペットのデータを設定 pet2.setType("猫"); pet2.setName("ミー"); pet2.setAge((byte)2); pet2.setGender(true); // 2匹のペットの紹介文を取得し、表示する System.out.println(pet1.getIntroduction()); System.out.println(pet2.getIntroduction()); } } // ここにPetクラスを作成してください。
問題2-3
人を表すPersonクラスを作成してください。
Personクラスを使用するClassNormalPracticeクラスのmainメソッドはすでに完成しています。
(変更は禁止です)
【Personクラス】
Personクラスには次の2つのインスタンスフィールドがあります。
- 氏名を表すname(String型)
- 年齢を表すage(int型)
Personクラスには5つのインスタンスメソッドが必要です。
- 氏名と年齢をオブジェクトにセットするためのsetDataメソッド
- 年齢の情報を取得するためのgetAgeメソッド
- 名前の情報を取得するためのgetNameメソッド
- 自己紹介をするintroduceメソッド
- 引数で渡ってきた他の人と年齢を比較するcompareメソッド
【実行結果】
わたしの名前は大島、年齢は30歳です。 わたしの名前は村上、年齢は30歳です。 わたしの名前は黒沢、年齢は32歳です。 わたくし大島は、村上さんと同じ年齢です。 わたくし大島は、黒沢さんより2歳年下です。 わたくし黒沢は、村上さんより2歳年上です。
【ClassNormalPractice.java】
public class ClassNormalPractice { public static void main(String[] args) { // Personクラスのオブジェクトを作成 Person[] persons = { new Person(), new Person(), new Person() }; // Personオブジェクトに氏名と年齢をセット persons[0].setData("大島", 30); persons[1].setData("村上", 30); persons[2].setData("黒沢", 32); // 自己紹介 for(int i = 0; i < persons.length; i++) { persons[i].introduce(); } System.out.println(); // 年齢差をチェック persons[0].compare(persons[1]); persons[1].compare(persons[2]); persons[2].compare(persons[1]); } } // ここにPersonクラスを作成してください。
問題2-4
フルコースを調理するシェフを表すChefクラスを作成してください。
Chefクラスを使用するOverloadBasicPracticeクラスのmainメソッドはすでに完成しています。
(変更は禁止です)
また、各種食材を表す卵Eggクラス、米Riceクラス、牛乳Milkクラス、チーズCheeseクラスもすでに完成しています。
(変更は禁止です)
Chefクラスには、インスタンスフィールドはありません。調理を表現するcookメソッドのみが存在します。
(cookメソッドの戻り値は料理名を表すString型です)
引数で渡される食材オブジェクトに応じて書き実行結果をもとに料理を完成させてください。
【実行結果】
1品目はスクランブルエッグです 2品目はオムライスです 3品目はリゾットです 4品目はプディングです
【OverloadBasicPractice.java】
public class OverloadBasicPractice { public static void main(String[] args) { // シェフオブジェクトの生成 Chef chef = new Chef(); // 食材オブジェクトの生成 Egg egg = new Egg(); Rice rice = new Rice(); Milk milk = new Milk(); Cheese cheese = new Cheese(); // シェフがフルコースを調理します System.out.println("1品目は" + chef.cook(egg, cheese) + "です"); System.out.println("2品目は" + chef.cook(rice, egg) + "です"); System.out.println("3品目は" + chef.cook(rice, cheese) + "です"); System.out.println("4品目は" + chef.cook(milk, egg) + "です"); } } // 各種食材クラス class Egg{} class Rice{} class Milk{} class Cheese{} // ここにChefクラスを作成してください
問題2-5
四角形を表すSquareクラスを作成してください。
Squareクラスを使用するConstructorBasicPracticeクラスのmainメソッドはすでに完成しています。
(変更は禁止です)
【Squareクラス】
幅widthと高さheight(どちらもdouble型)の2つのインスタンスフィールドを持ちます。
幅と高さの初期値を引数として受け取るコンストラクタが存在します。受け取った初期値をそのまま各フィールドにセットしてください。
幅と高さに関する情報を出力するinformメソッド(引数なし・戻り値なし)が存在します。出力内容は、実行結果を参考にしてください。
面積を算出するgetAreaメソッド(引数なし・戻り値double型)が存在します。
幅の値を引数で受け取った増分だけ増加するaddWidthメソッド(引数double型・戻り値なし)が存在します。
【実行結果】
この四角形の幅は4.5、高さは2.8です。 この四角形の面積は12.6です。 この四角形の幅は7.5、高さは2.8です。 この四角形の面積は21.0です。
【ConstructorBasicPractice.java】
public class ConstructorBasicPractice { public static void main(String[] args) { // Squareクラスのオブジェクトを作成 Square square = new Square(4.5, 2.8); // 四角形の情報を出力 square.inform(); // 面積の表示 System.out.println("この四角形の面積は" + square.getArea() + "です。"); // 幅を3.0増加させる square.addWidth(3.0); System.out.println(); // 四角形の情報を出力 square.inform(); // 面積の表示 System.out.println("この四角形の面積は" + square.getArea() + "です。"); } } // ここにSquareクラスを作成してください。
問題2-6
車を表すCarクラスを作成してください。
Carクラスを使用するConstructorOverloadPracticeクラスのmainメソッドはすでに完成しています。
(変更は禁止です)
【Carクラス】
車幅を表すtypeインスタンスフィールド(String型)と、ナンバーを表すnumberインスタンスフィールド(int型)と、ガソリンを表すgasolineインスタンスフィールド(double型)の3つがあります。
コンストラクタをオーバーロードして2つ定義します。
1つ目は、第一引数に車種、第二引数にナンバー、第三引数にガソリンを受け取り、引数の値をインスタンスフィールドに受け渡します。
2つ目は、第一引数に車種、第二引数にナンバーを受け取り、引数の値をインスタンスフィールドに受け渡します。
ガソリンの量は初期値として5.0を設定します。走行を表現するrunインスタンスメソッドを定義します。
戻り値はなし、引数には走行する分のガソリン量(double型)を設定します。
もし残ガソリン量が、走行ガソリン量に満たない場合は、「ナンバー○○の△△はガソリン不足のため走行できません」と出力します。車の情報を表示するshowInfoインスタンスメソッドを定義します。
引数と戻り値はなしで、実装は下記実行結果を参考にしてください。
【実行結果】
ナンバー1234のトントはガソリン7.0リットル分走行しました ナンバー6789のファットはガソリン不足のため走行できません 車種:トント ナンバー:1234 ガソリン:3.0リットル 車種:ファット ナンバー:6789 ガソリン:5.0リットル
【ConstructorOverloadPractice.java】
public class ConstructorOverloadPractice { public static void main(String[] args) { // 1台目の車インスタンス生成 Car car1 = new Car("トント", 1234, 10.0); // 2台目の車インスタンス生成 Car car2 = new Car("ファット", 6789); // 2台の車を走行させる car1.run(7.0); car2.run(7.0); // 2台の車の情報を出力 car1.showInfo(); car2.showInfo(); } } // ここにCarクラスを作成してください
問題2-7
ロボットを表すRobotクラスを作成してください。
Robotクラスを使用するStaticBasicPracticeクラスのmainメソッドはすでに完成しています。
(変更は禁止です)
【Robotクラス】
次のような2つのインスタンスフィールドと、1つのクラスフィールドを持ちます。
・ロボットIDを表すインスタンスフィールド id (int型)
・ロボット名を表すインスタンスフィールド name (String型)
・ロボット総生産数を表すクラスフィールド total (int型)String型の引数をひとつだけ持つコンストラクタを定義します。
引数で渡ってきた文字列をロボット名に設定し、ロボット総生産数をインクリメントします。
ロボットIDは1からの連番を割り振りますが、ロボット総生産数の値をうまく利用してください。ロボット総生産数の値を取得するためのgetTotalクラスメソッド(引数なし・戻り値 int型)を定義します。
ロボットの情報を紹介するためのintroduceメソッド(引数なし・戻り値なし)を定義します。
実装は下記実行結果を参考にしてください。
【実行結果】
ロボット総生産数:0 ロボット総生産数:5 ロボット総生産数:6 ID:1 NAME:RX ID:2 NAME:PZ ID:3 NAME:SS ID:4 NAME:FG ID:5 NAME:VC ID:6 NAME:SUPER-Z
【StaticBasicPractice.java】
public class StaticBasicPractice { public static void main(String[] args) { // ロボット総生産数の表示 System.out.println("ロボット総生産数:" + Robot.getTotal()); // 5体のロボットオブジェクトを作成 // (6体目は保留) Robot[] robots = { new Robot("RX"), new Robot("PZ"), new Robot("SS"), new Robot("FG"), new Robot("VC"), null }; // ロボット総生産数の表示 System.out.println("ロボット総生産数:" + Robot.getTotal()); // 6体目のロボットオブジェクトを作成 robots[5] = new Robot("SUPER-Z"); // ロボット総生産数の取得 System.out.println("ロボット総生産数:" + Robot.getTotal()); System.out.println(); // 6体のロボットの情報を表示 for(int i = 0; i < robots.length; i++) { robots[i].introduce(); } } } // ここにRobotクラスを作成してください
問題2-8
ピッチャーを表すPitcherクラスを作成してください。
一般的な野球選手を表現するBaseballPlayerクラスはすでに完成しています。
(変更は禁止です)
また、Pitcherクラスを使用するInheritanceBasicPracticeクラスのmainメソッドはすでに完成しています。
(変更は禁止です)
【Pitcherクラス】
BaseballPlayerクラスを継承します。
スーパークラスから受け継いだ3つのインスタンスフィールドのほかに、防御率を表すeraインスタンスフィールド(double型)を定義します。
引数に選手名、背番号、打率、防御率の4つの値を受け取るコンストラクタを定義します。
そのうち、選手名、背番号、打率の3つの値は、スーパークラスのインスタンスフィールドに受け渡します。投手の情報を紹介するintroduceインスタンスメソッドを定義します。
出力内容は、下記実行結果を参考にしてください。
【実行結果】
選手名:山田 背番号:99 打率 :0.09 防御率:2.13
【InheritanceBasicPractice.java】
public class InheritanceBasicPractice { public static void main(String[] args) { // 投手オブジェクトの生成 Pitcher p = new Pitcher("山田", 99, 0.09, 2.13); // 投手の紹介 p.introduce(); } } // 野球選手クラス class BaseballPlayer { // 選手名 protected String name; // 背番号 protected int uniformNumber; // 打率 protected double battingAverage; } // ここにPitcherクラスを作成してください
問題2-9
雑誌を表すMagazineクラスを作成してください。
本を表すBookクラスはすでに完成しています。
(変更は禁止です)
また、Magazineクラスを使用するInheritanceConstructorPracticeクラスのmainメソッドはすでに完成しています。
(変更は禁止です)
【Magazineクラス】
Bookクラスを継承します。
スーパークラスから受け継いだ2つのインスタンスフィールド(タイトル、価格)のほかに、表紙に掲載されているタレント名を保持するためのcoverPersonNameインスタンスフィールド(String型)を定義します。
引数にタイトル、価格、表紙タレント名の3つの値を受け取るコンストラクタを定義します。
そのうち、タイトル、価格の2つの値は、スーパークラスのコンストラクタを利用して受け渡します。雑誌の内容を紹介するshowインスタンスメソッドを定義します。
出力内容は、下記実行結果を参考にしてください。
【実行結果】
東京Runner絶賛発売中!! 定価650円 今回の表紙:上野彩さん
【InheritanceConstructorPractice.java】
public class InheritanceConstructorPractice { public static void main(String[] args) { // Magazineクラスのオブジェクトを生成 Magazine magazine = new Magazine("東京Runner", 650, "上野彩"); // 雑誌の内容紹介メソッドの呼び出し magazine.show(); } } // Bookクラス class Book { // タイトル private String title; // 価格 private int price; // コンストラクタ public Book(String title, int price) { this.title = title; this.price = price; } // タイトル取得メソッド public String getTitle() { return title; } // 価格取得メソッド public int getPrice() { return price; } } // ここにMagazineクラスを作成してください
問題2-10
目覚まし時計を表すAlarmClockクラスを作成してください。
普通の時計を表すClockクラスはすでに完成しています。
(変更は禁止です)
また、AlarmClockクラスを使用するOverrideBasicPracticeクラスのmainメソッドはすでに完成しています。
(変更は禁止です)
【AlarmClockクラス】
Clockクラスを継承します。
スーパークラスから受け継いだ3つのインスタンスフィールド(時・分・秒)のほかに、アラーム時刻(時・分)を表すalarmHourとalarmMinuteインスタンスフィールド(int型)を定義します。
5つの引数の値を受け取るコンストラクタを定義します。
そのうち、時・分・秒の3つの値は、スーパークラスのコンストラクタを利用してインスタンスフィールドに受け渡します。スーパークラスにあるshowDataインスタンスメソッドを適切にオーバーライドします。
出力内容は、下記実行結果を参考にしてください。
【実行結果】
ただいまの時刻:10時15分30秒 ただいまの時刻:15時45分20秒 アラーム設定時刻:6時30分
【OverrideBasicPractice.java】
public class OverrideBasicPractice { public static void main(String[] args) { // 普通の時計オブジェクトの生成 Clock c1 = new Clock(10, 15, 30); // 普通の時計の情報の表示 c1.showData(); System.out.println(); // 目覚まし時計オブジェクトの生成 AlarmClock c2 = new AlarmClock(15, 45, 20, 6, 30); // 目覚まし時計の情報の表示 c2.showData() } } // 時計クラス class Clock { // 時分秒 private int hour; private int minute; private int second; // コンストラクタ public Clock(int hour, int minute, int second) { this.hour = hour; this.minute = minute; this.second = secon; } // 情報表示メソッド public void showData() { System.out.println("ただいまの時刻:" + hour + "時" + minute + "分" + second + "秒"); } } // ここにAlarmClockクラスを作成してください
独学で挫折しそうになったら、オンラインプログラミングスクール