すべて 指定のパッケージ内に作成してください
ソースコード(クラス名.java)をSドライブにアップロードして提出してください
S:\Java\課題提出\基礎\20章
以下の仕様でクラス、インターフェースを作成しましょう。
すべて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は謎の飛び方をします
立体を表現するインターフェース、クラスを作成しましょう
以下の仕様で、立体を表すインターフェースを作成してください。
アクセス修飾子は、クラス・メソッドはpublicとします。
パッケージ | chapter20.kadai2 | ||||
---|---|---|---|---|---|
インターフェース名 | SolidBody | ||||
メソッド |
|
以下の仕様で、柱状体を表す抽象クラスを作成してください。
2-1で作成した SolidBody インターフェースを実装したクラスとします。
クラスのアクセス修飾子はpublicとします。
パッケージ | chapter20.kadai2 | ||||
---|---|---|---|---|---|
抽象クラス名 | Prism ※ SolidBodyインターフェースを実装 | ||||
フィールド |
|
||||
抽象メソッド |
|
||||
メソッド ※通常のメソッド |
|
以下の仕様で、円柱を表すクラスを作成してください。
2-2で作成した Prism クラスを継承したクラスとします。
クラス、コンストラクタのアクセス修飾子はpublicとします。
パッケージ | chapter20.kadai2 | ||||
---|---|---|---|---|---|
クラス名 | Cylinder ※ Prismクラスを継承 | ||||
フィールド |
|
||||
コンストラクタ | 引数で底面の半径と高さを受け取り、フィールドにセットする | ||||
メソッド |
|
以下の仕様で、四角柱を表すクラスを作成してください。
2-2で作成した Prism クラスを継承したクラスとします。
クラス、コンストラクタのアクセス修飾子はpublicとします。
パッケージ | chapter20.kadai2 | ||||||||
---|---|---|---|---|---|---|---|---|---|
クラス名 | Rectangular ※ Prismクラスを継承 | ||||||||
フィールド |
|
||||||||
コンストラクタ | 引数で底面の縦の長さ、底面の横の長さ、高さを受け取り、フィールドにセットする | ||||||||
メソッド |
|
以下の仕様で、球を表すクラスを作成してください。
2-1で作成した SolidBody インターフェースを実装したクラスとします。
クラス、コンストラクタのアクセス修飾子はpublicとします。
パッケージ | chapter20.kadai2 | ||||
---|---|---|---|---|---|
クラス名 | Sphere ※ SolidBody インターフェースを実装 | ||||
フィールド |
|
||||
コンストラクタ | 引数で球の半径を受け取り、フィールドにセットする | ||||
メソッド |
|
Cylinderクラス、Rectangularクラス、Sphere クラスに、ObjectクラスのtoStringメソッドをオーバーライドしてください。
立体の形状、各フィールド値、体積、表面積を連結した文字列を作成し、リターンする処理とします。
(2-7の実行結果例を参照)
chapter20.kadai2 パッケージに SolidBodyTest クラスを作成し、mainメソッドに以下の処理を作成してください
実行結果例
[円柱]底面の半径:3.0 高さ:5.0 体積:141.3716694115407 表面積:150.79644737231007
[直方体]縦:2.0 横:3.0 高さ:4.0 体積:24.0 表面積:52.0
[球]半径:5.0 体積:523.5987755982989 表面積:314.1592653589793