質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

4249閲覧

共通するメンバを1つのクラスに集約したい事と該当のクラスに継承をしたいです。

ssssa

総合スコア39

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2018/08/18 06:42

二種類の飛行機、戦闘機(FighterAiracraft)と、旅客機(PassengerPlane)クラスのインスタンスを生成し、各クラスのメソッドを実行するプログラムである。この2つのクラスには、共通するメンバが存在する。
そこで、これら2つのクラスに共通するメンバを、飛行機(AirPlane)クラスに集約し、FighterAiracraftクラス、およびPassengerPlaneは、それらのクラスを継承したものにするように、プログラムを書きかかえなさい。ただし、この時、AirPlaneクラスは、抽象メソッドfly()を持つ抽象クラスとすること。

解答は合っているのですが、これら2つのクラスに共通するメンバを、飛行機(AirPlane)クラスに集約し、FighterAiracraftクラス、およびPassengerPlaneは、それらのクラスを継承したものにするように、プログラムを書きかかえなさい。ただし、この時、AirPlaneクラスは、抽象メソッドfly()を抽象クラスとすること。の部分がうまくかけなくご教示していただきたいです。

以下が私が書いたコードになります。

Java

1public class Airplane extends FighterAircraft { 2 3 /** 4 * @return 5 * 6 */ 7 public void fly() { 8 System.out.println("攻撃に出るため飛行します。"); 9 10 } 11 12} 13

Java

1public class FighterAircraft { 2 private String Type = "戦闘機"; 3 4 public String getType() { 5 return Type; 6 } 7 8 public void fly() { 9 System.out.println("攻撃に出るために飛行します。"); 10 } 11 12 public void fight() { 13 System.out.println("戦闘します。"); 14 } 15 16} 17
public class PassengerPlane { private String type = "旅客機"; public String getType() { return type; } public void fly() { System.out.println("乗客を乗せて目的地まで飛行します。"); } public void carryPassengers() { System.out.println("乗客を目的地まで運びます。"); } }

Java

1public class Problemex3_1 { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 FighterAircraft fighter = new FighterAircraft(); 8 PassengerPlane airlinear = new PassengerPlane(); 9 // 戦闘機クラスの処理 10 fighter.fly(); // 飛行する 11 fighter.fight(); // 戦闘する 12 // 旅客機クラスの処理 13 airlinear.fly(); // 飛行する 14 airlinear.carryPassengers(); // 乗客を運ぶ 15 16 } 17 18} 19

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

継承の関係がおかしくありませんか?

問題文(何かの問題文ですよね?)には

Java

1// いくつかの予約語は省略 2abstract class AirPlane 3class FighterAircraft extends AirPlane 4class PassengerPlane extends AirPlane

このようにしろと書いてありますが、質問内のソースコードでは

Java

1class AirPlane extends FighterAircraft 2class FighterAircraft 3class PassengerPlane

こうなってます。
言葉で表現すると、
「戦闘機という乗り物の種類があり、飛行機はその一種。旅客機は別の乗り物。」
といった感じです。

これら2つのクラスに共通するメンバを、飛行機(AirPlane)クラスに集約し、FighterAiracraftクラス、およびPassengerPlaneは、それらのクラスを継承したものにするように、プログラムを書きかかえなさい。ただし、この時、AirPlaneクラスは、抽象メソッドfly()を抽象クラスとすること。

これはAirPlaneクラスを

Java

1public abstract class AirPlane { 2 3 protected String type; 4 5 public abstract void fly(); 6 7 // 必要ならゲッター(アクセッサー)を 8 public String getType() { 9 return type; 10 } 11}

こう書き換えて、あとは残った先述の2つのクラスが継承すれば良いのではないかと思います。

投稿2018/08/18 07:42

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssssa

2018/08/18 08:05

回答ありがとうございます。 参考にさせていただきます。
guest

0

【Java】 abstractって何?
インターフェイスの作成方法
java abstract で検索と出るサイトでとてもわかりやすく説明されていますのでご参考までにどうぞ。

"攻撃に出るために飛行します。"
"乗客を乗せて目的地まで飛行します。"

これを分解すればわかりやすくなりそうです。

"攻撃に出るために" + "飛行します。"

"乗客を乗せて目的地まで" + "飛行します。"

fly() "飛行します。"

各前半部分を変えれば良さそうです。

投稿2018/08/18 10:25

編集2018/08/18 10:32
opyon

総合スコア1009

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

opyon

2018/08/18 10:27

別の質問がクローズされないまま質問されていますが解決してないのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問