すべて 指定のパッケージ内に作成してください

ソースコード(クラス名.java)をSドライブにアップロードして提出してください

S:\Java\課題提出\基礎\20章


問題1

以下の仕様でクラス、インターフェースを作成しましょう。

すべてchapter20.kadai1パッケージ、アクセス修飾子はクラス・インターフェース・コンストラクタ・メソッドはpublic、フィールドはprivate とします。

必要であれば、下記仕様に書いていないコンストラクタを追加作成してもよいです。

インターフェース FlyingThing

抽象メソッド void fly() を宣言

抽象クラス Machine

抽象メソッド void startUp()を宣言

抽象クラス Animal

文字列フィールドnameを宣言

コンストラクタAnimal(String name)を作成し、引数のnameをフィールドのnameにセット

抽象メソッド void sleep() を宣言

メソッド void talk()を作成する。※talkは抽象メソッドではありません

talkメソッドではコンソールに「私の名前はxxxです」と表示

xxx部分は、フィールドのnameを使用すること。

クラス Television 宣言時にMachineを継承

void startUp()を実装する。

startUpメソッドではコンソールに「テレビをつけると番組を受信し表示します」と表示

クラス Drone 宣言時にMachineを継承、FlyingThingを実装

void startUp()を実装する。

startUpメソッドではコンソールに「ドローンは電源を入れるとプロペラが回転します」と表示

void fly()を実装する。

flyメソッドではコンソールに「ドローンは上下、前後、左右に自由に飛ばせます」と表示

クラス Cat 宣言時にAnimalを継承

void sleep () を実装する。

sleepメソッドでは画面に「ネコはまるくなって眠ります」と表示

クラス Momonga 宣言時にAnimalを継承、FlyingThingを実装

void sleep () を実装する。

sleepメソッドではコンソールに「モモンガは木のうろに入って眠ります」と表示

void fly()を実装する。

flyメソッドではコンソールに「モモンガは木から木へ飛び移ります」と表示

クラス UFO 宣言時にFlyingThingを実装

void fly()を実装する。

flyメソッドではコンソールに、「UFOは謎の飛び方をします」と表示


各インターフェース、クラスの模式図
各インターフェース、クラスの模式図

以下のmainメソッドから呼び出して実行します。


package chapter20.kadai1;

public class PolymorTest {
    public static void main(String[] args) {
        Cat mike = new Cat("ミケ");
        Cat kuro = new Cat("クロ");
        Momonga momo = new Momonga("モモ");
        Momonga nga = new Momonga("ンガ");

        Television bravia = new Television();
        Drone dji = new Drone();

        UFO enban = new UFO();
        
        Animal[] animals = {mike, kuro, momo, nga};
        Machine[] machines = {bravia, dji};
        FlyingThing[] flys = {momo, nga, dji, enban};

        for(Animal animal: animals) {
            watchAnimal(animal);
        }

        for(Machine machine: machines) {
            useMachine(machine);
        }

        for(FlyingThing fly: flys) {
            flySomething(fly);
        }
    }

    // 動物を観察するメソッド
    private static void watchAnimal(Animal a) {
        a.talk();
        a.sleep();
    }

    // 機械を使うメソッド
    private static void useMachine(Machine m) {
        m.startUp();
    }

    // 飛ぶものを飛ばすメソッド
    private static void flySomething(FlyingThing f) {
        f.fly();
    }
}
            

実行結果

私の名前はミケです

ネコはまるくなって眠ります

私の名前はクロです

ネコはまるくなって眠ります

私の名前はモモです

モモンガは木のうろに入って眠ります

私の名前はンガです

モモンガは木のうろに入って眠ります

テレビをつけると番組を受信し表示します

ドローンは電源を入れるとプロペラが回転します

モモンガは木から木へ飛び移ります

モモンガは木から木へ飛び移ります

ドローンは上下、前後、左右に自由に飛ばせます

UFOは謎の飛び方をします

問題2

立体を表現するインターフェース、クラスを作成しましょう

2-1

各インターフェース、クラスの模式図
各インターフェース、クラスの模式図

以下の仕様で、立体を表すインターフェースを作成してください。

アクセス修飾子は、クラス・メソッドはpublicとします。

パッケージ chapter20.kadai2
インターフェース名 SolidBody
メソッド
double getVolume() 体積計算用
double getAllArea() 表面積計算用

2-2

柱状体の模式図
柱状体の模式図

以下の仕様で、柱状体を表す抽象クラスを作成してください。

2-1で作成した SolidBody インターフェースを実装したクラスとします。

クラスのアクセス修飾子はpublicとします。

パッケージ chapter20.kadai2
抽象クラス名 Prism ※ SolidBodyインターフェースを実装
フィールド
protected double height 柱状体の高さ
抽象メソッド
protected double getBottomArea() 底面積計算用
protected double getSideArea() 側面積計算用
メソッド
※通常のメソッド
public double getVolume() ※ SoildBody のgetVolumeをオーバーライドする
体積を計算してリターンする
柱状体の体積は、底面積 × 高さ
public double getAllArea() ※ SolidBody のgetAllAreaをオーバーライドする
表面積を計算してリターンする
柱状体の表面積は、底面積 × 2 + 側面積

2-3

以下の仕様で、円柱を表すクラスを作成してください。

2-2で作成した Prism クラスを継承したクラスとします。

クラス、コンストラクタのアクセス修飾子はpublicとします。

円柱
パッケージ chapter20.kadai2
クラス名 Cylinder ※ Prismクラスを継承
フィールド
private double radius 底面の半径
コンストラクタ 引数で底面の半径と高さを受け取り、フィールドにセットする
メソッド
protected double getBottomArea() ※ Prism のgetBottomAreaをオーバーライドする
底面積を計算してリターンする
円柱の底面積は、半径の2乗 × 円周率
protected double getSideArea() ※ Prism のgetSideAreaをオーバーライドする
側面積を計算してリターンする
円柱の側面積は、2 × 半径 × 円周率 × 高さ

2-4

以下の仕様で、四角柱を表すクラスを作成してください。

2-2で作成した Prism クラスを継承したクラスとします。

クラス、コンストラクタのアクセス修飾子はpublicとします。

四角柱
パッケージ chapter20.kadai2
クラス名 Rectangular ※ Prismクラスを継承
フィールド
private double len 底面の縦の長さ
private double width 底面の横の長さ
コンストラクタ 引数で底面の縦の長さ、底面の横の長さ、高さを受け取り、フィールドにセットする
メソッド
protected double getBottomArea() ※ Prism のgetBottomAreaをオーバーライドする
底面積を計算してリターンする
四角柱の底面積は、縦×横
protected double getSideArea() ※ Prism のgetSideAreaをオーバーライドする
側面積を計算してリターンする
四角柱の側面積は、(縦+横) × 2 × 高さ

2-5

以下の仕様で、球を表すクラスを作成してください。

2-1で作成した SolidBody インターフェースを実装したクラスとします。

クラス、コンストラクタのアクセス修飾子はpublicとします。

球
パッケージ chapter20.kadai2
クラス名 Sphere ※ SolidBody インターフェースを実装
フィールド
private double radius 底面の半径
コンストラクタ 引数で球の半径を受け取り、フィールドにセットする
メソッド
public double getVolume() ※ SolidBody のgetVolumeをオーバーライドする
体積を計算してリターンする
球の体積は、(4 ÷ 3) × 半径の3乗 × 円周率
public double getAllArea() ※ SolidBody のgetAllAreaをオーバーライドする
表面積を計算してリターンする
球の表面積は、4 × 半径の2乗 × 円周率

2-6

Cylinderクラス、Rectangularクラス、Sphere クラスに、ObjectクラスのtoStringメソッドをオーバーライドしてください。

立体の形状、各フィールド値、体積、表面積を連結した文字列を作成し、リターンする処理とします。

(2-7の実行結果例を参照)

2-7

chapter20.kadai2 パッケージに SolidBodyTest クラスを作成し、mainメソッドに以下の処理を作成してください

  1. SolidBody型の配列 solids を要素数 3 で宣言する
  2. 配列の0番目に Cylinder型のインスタンス、1番目に Rectangular型のインスタンス、2番目に Sphere型のインスタンスを代入する
  3. ループ処理で配列の要素を System.out.println(solids[ i ])で出力する

実行結果例

[円柱]底面の半径:3.0 高さ:5.0 体積:141.3716694115407 表面積:150.79644737231007

[直方体]縦:2.0 横:3.0 高さ:4.0 体積:24.0 表面積:52.0

[球]半径:5.0 体積:523.5987755982989 表面積:314.1592653589793