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

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

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

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

Q&A

1回答

1762閲覧

共通するメンバ変数の集約の仕方について

pansaku

総合スコア1

Java

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

0グッド

0クリップ

投稿2020/07/29 09:27

編集2020/07/29 09:57

前提・実現したいこと

戦闘機(FighterAiracraft)と、旅客機(PassengerPlaneの2つのクラスに共通するtypeメンバ変数を、飛行機(AirPlane)クラスに集約したいです。

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

発生している問題・エラーメッセージ

集約の仕方が分からない。

該当のソースコード

java

1public class Problemex3_1{ 2 /** 3 * メインメソッド メイン処理を実行します。 4 * 5 * @param args 6 * プログラム起動引数 7 */ 8 public static void main(String[] args) { 9 // 戦闘機クラスのインスタンスの生成 10 Problemex3_1_FighterAiracraft fighter = new Problemex3_1_FighterAiracraft(); 11 Problemex3_1_PassengerPlane airlinear = new Problemex3_1_PassengerPlane(); 12 // 戦闘機クラスの処理 13 fighter.fly(); // 飛行する 14 fighter.fight(); // 戦闘する 15 // 旅客機クラスの処理 16 airlinear.fly(); // 飛行する 17 airlinear.carryPassengers(); // 乗客を運ぶ 18 19 } 20 21}

PassengerPlane

1 2public class Problemex3_1_PassengerPlane extends Problemex3_1_AirPlane { 3 // 飛行機のタイプ 4 private String type = "旅客機"; 5 6 // タイプの取得 7 public String getType() { 8 return type; 9 } 10 11 // 飛行する 12 public void fly() { 13 System.out.println("乗客を乗せて目的地まで飛行します。"); 14 } 15 16 // 戦闘する 17 public void carryPassengers() { 18 System.out.println("乗客を目的地まで運びます。"); 19 } 20} 21

FighterAiracraft

1public class Problemex3_1_FighterAiracraft extends Problemex3_1_AirPlane { 2 // 飛行機のタイプ 3 private String type = "戦闘機"; 4 5 // タイプの取得 6 public String getType() { 7 return type; 8 } 9 10 // 飛行する 11 public void fly() { 12 System.out.println("攻撃に出るために飛行します。"); 13 } 14 15 // 戦闘する 16 public void fight() { 17 System.out.println("戦闘します。"); 18 } 19} 20

AirPlane

1abstract public class Problemex3_1_AirPlane { 2 // 飛行機のタイプ 3 protected String type; 4 5 // 抽象メソッドfly 6 public abstract void fly(); 7 8 // タイプの取得 9 public String getType() { 10 return type; 11 } 12}

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

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

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

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

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

m.ts10806

2020/07/29 09:50

コード内の名称を質問本文に記載する場合、省略せずにコピペしてください。正しく伝わりません。
pansaku

2020/07/29 09:56

ご返信ありがとうございます。 追記致しました。
guest

回答1

0

スーパークラスにある type をサブクラスから変えるには、コンストラクタ内で変更するのが
この場合は一番楽です。

以下は、スーパークラス( Problemex3_1_AirPlane ) にあるので削除しました。

  • Problemex3_1_FighterAiracraft の type フィールド
  • Problemex3_1_FighterAiracraft の getType()関数
  • Problemex3_1_PassengerPlane の type フィールド
  • Problemex3_1_PassengerPlane の getType()関数
public class Problemex3_1_FighterAiracraft extends Problemex3_1_AirPlane { // コンストラクタ public Problemex3_1_FighterAiracraft() { type = "戦闘機"; // 飛行機のタイプ } // 飛行する public void fly() { System.out.println(this.getType() + ":" + "攻撃に出るために飛行します。"); } // 戦闘する public void fight() { System.out.println("戦闘します。"); } }
public class Problemex3_1_PassengerPlane extends Problemex3_1_AirPlane { // コンストラクタ public Problemex3_1_PassengerPlane() { type = "旅客機"; // 飛行機のタイプ } // 飛行する public void fly() { System.out.println(this.getType() + ":" + "乗客を乗せて目的地まで飛行します。"); } // 戦闘する public void carryPassengers() { System.out.println("乗客を目的地まで運びます。"); } }

投稿2020/07/31 10:25

YakumoSaki

総合スコア2027

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問