tt25mrc
@tt25mrc

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

java silver SE17 第5章−13

解決したいこと

以下の問題について質問です。

問題

1. interface Worker {
2.   void work();
3. }
4.
5. class Employee {
6.    public void work() {
7.       System.out.println("work");
8.    }
9. }

1. class Engineer extends Employee implements Worker { }

これらのクラスを利用する以下のプログラムを、コンパイル、実行した時の結果として、正しいものを選びなさい。

1. public class Main {
2.    public static void main (String[] args) {
3.        Worker worker = new Engineer ();
4.        worker. work();
5.    }
6. }

A.Engineerクラスでコンパイルエラーが発生する
B.Mainクラスでコンパイルエラーが発生する
C.「work」と表示される
D.実行時に例外がスローされる

【質問】
5行目のEmployeeクラスが、急に次でinterface Workerをimplementsしているが、5行目の段階でimplementsするべきではないのか?と思いました。
ただ単にClassを定義しているものを、違うところで、implementsしてもいいものなのか疑問に思っています。

質問がよく分からなく、基礎的な部分で申し訳ございません。

0

3Answer

5行目のEmployeeクラスが、急に次でinterface Workerをimplementsしているが、5行目の段階でimplementsするべきではないのか?

Employeeクラスがinterface Workerをimplementsするなら可能ですが、
interface Workerをimplementsしているのは Engineerクラスですから、5行目では書けませんよね。そういうことではなくて??

ちなみに、答えは 『C.「work」と表示される』ですね。

0Like

5行目の段階でimplementsするべきではないのか?

EmployeeとWorkerはis-a関係なのでimplementsするべきと思う気持ちは分かりますが、この問題の主題はそこではなくて、extendsとimplementsは同時に出来るよということだと思います。

Workerは自分で作成、EmployeeはAライブラリのクラスで変更不可、こういった状況でEngineerを作りたいというケースではextendsとimplementsは同時に出来るという機能が必要になります。

出題が適切ではないという話になるかもしれませんが、そこは目を瞑るしかないですね。

0Like

良い質問だと思います。

結論から言うと、問題の範囲外なので判断しかねる、という回答になってしまいます。

どの段階でimplementsするかは設計の話です。「そのシステムが実現する世界を表現するにあたり適切かどうか」という点での判断になると考えています。

ですがこの問題はJavaの仕様としてどうなるか、という問題なのでEngineerWorkerに重要な意味は無いと思います。せいぜい要素の関係として適切、というくらいでしょう。(問題的には「AnimalとDog」のような例でもよい)
ですのでinterfaceをどちらがimplementsすべきか、という疑問に回答できるような意図は含まれていないと思います。

0Like

Your answer might help someone💌