【8】ポリモフィズムとパッケージ
Quiz-summary
0 of 21 questions completed
Questions:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
Information
問題(全22問)を始めるには下のボタンを押してください!
You have already completed the quiz before. Hence you can not start it again.
Quiz is loading...
You must sign in or sign up to start the quiz.
You have to finish following quiz, to start this quiz:
Results
0 of 21 questions answered correctly
Your time:
Time has elapsed
You have reached 0 of 0 points, (0)
Categories
- Not categorized 0%
-
お疲れ様でした。
解答と解説は下のボタンを押してください!
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- Answered
- Review
-
Question 1 of 21
1. Question
抽象クラスである Foo クラスに定義できるコンストラクタは次のどれですか。3つ選択してください。
Correct
正解です!
抽象クラスは new キーワードによる明示的なインスタンス化はできませんが、コンストラクタを定義し、オブジェクトが生成された際の初期化処理は記述できます。コンストラクタ定義規則は、具象クラスと同じであるため、選択肢A、B、Dが正しいです。コンストラクタに abstract 修飾子は使用できません。
Incorrect
不正解です!
抽象クラスは new キーワードによる明示的なインスタンス化はできませんが、コンストラクタを定義し、オブジェクトが生成された際の初期化処理は記述できます。コンストラクタ定義規則は、具象クラスと同じであるため、選択肢A、B、Dが正しいです。コンストラクタに abstract 修飾子は使用できません。
-
Question 2 of 21
2. Question
abstract 修飾子が使用可能なものは次のどれですか。3つ選択してください。
Correct
正解です!
abstract 修飾子は、コンストラクタおよび変数には使用できません。
Incorrect
不正解です!
abstract 修飾子は、コンストラクタおよび変数には使用できません。
-
Question 3 of 21
3. Question
private 修飾子を使用可能なメンバは次のどれですか。3つ選択してください。
Correct
正解です!
インタフェースのメソッドは暗黙的に public abstract となり、変数は暗黙的に public static final となります。明示的に private を付与するとコンパイルエラーとなるため、選択肢B、選択肢Eは誤りです。また、抽象メソッドはサブラスでオーバーライドする目的で用意するため、 private 修飾子は付与できずコンパイルエラーとなります。したがって選択肢Cは誤りです。
Incorrect
不正解です!
インタフェースのメソッドは暗黙的に public abstract となり、変数は暗黙的に public static final となります。明示的に private を付与するとコンパイルエラーとなるため、選択肢B、選択肢Eは誤りです。また、抽象メソッドはサブラスでオーバーライドする目的で用意するため、 private 修飾子は付与できずコンパイルエラーとなります。したがって選択肢Cは誤りです。
-
Question 4 of 21
4. Question
次のコードがあります。
定義できないものは次のどれですか。1つ選択してください。
Correct
正解です。
問題文のクラスは抽象クラスです。したがって、処理内容をもつ通常のメソッドと抽象メソッドを混在させることができます。②は抽象メソッド、③は通常の処理内容をもつメソッド、④と⑤はコンストラクタの定義であり、これらに問題ありません。しかし、①は変数に abstract 修飾子を使用しているため、誤りです。
Incorrect
不正解です。
問題文のクラスは抽象クラスです。したがって、処理内容をもつ通常のメソッドと抽象メソッドを混在させることができます。②は抽象メソッド、③は通常の処理内容をもつメソッド、④と⑤はコンストラクタの定義であり、これらに問題ありません。しかし、①は変数に abstract 修飾子を使用しているため、誤りです。
-
Question 5 of 21
5. Question
正しい記述は次のどれですか。3つ選択してください。
Correct
正解です!
抽象クラスには、処理内容をもつ通常のメソッドと抽象メソッドを混在させることができるため、選択肢Cは誤りです。また選択肢Dは、スーパークラスがAであり、サブクラスがBです。クラスBも具象クラスでなく抽象クラスであれば、抽象クラスであるクラスAの抽象メソッドをすべてオーバーライドしなくても問題ありません。
Javaで作成されたアプリケーションはJVM(Java仮想マシン)で稼働し、JVMがメモリ管理など行うため、選択しEは誤りです。Incorrect
不正解です!
抽象クラスには、処理内容をもつ通常のメソッドと抽象メソッドを混在させることができるため、選択肢Cは誤りです。また選択肢Dは、スーパークラスがAであり、サブクラスがBです。クラスBも具象クラスでなく抽象クラスであれば、抽象クラスであるクラスAの抽象メソッドをすべてオーバーライドしなくても問題ありません。
-
Question 6 of 21
6. Question
次のコードがあります。
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
Foo クラスは抽象クラスであるため、インスタンス化はできません。したがって、12行目によりコンパイルエラーとなります。
Incorrect
不正解です。
Foo クラスは抽象クラスであるため、インスタンス化はできません。したがって、12行目によりコンパイルエラーとなります。
-
Question 7 of 21
7. Question
次のコードがあります。
定義できないものは次のどれですか。1つ選択してください。
Correct
正解です。
インタフェースに定義できるのは、 public static final 修飾子による定数と、 public abstract メソッドのみです。①は private 修飾子は使用できないため、コンパイルエラーとなります。③は変数に abstract 修飾子が使用できないため、コンパイルエラーとなります。なお、②、④、⑤にはコンパイル後、 public static final 修飾子が追加されます。
Incorrect
不正解です。
インタフェースに定義できるのは、 public static final 修飾子による定数と、 public abstract メソッドのみです。①は private 修飾子は使用できないため、コンパイルエラーとなります。③は変数に abstract 修飾子が使用できないため、コンパイルエラーとなります。なお、②、④、⑤にはコンパイル後、 public static final 修飾子が追加されます。
-
Question 8 of 21
8. Question
次のコードがあります。
有効なコードは次のどれですか。3つ選択してください。
Correct
正解です!
実装クラスを宣言する構文は次のとおりです。
(構文)
[修飾子] class クラス名 implements インタフェース名 { }implements キーワードの後には、1つ以上のインタフェースを指定することができます。複数指定する場合は、「,」(カンマ)で区切ります。したがって、選択肢B、Eは正しいです。また、インタフェースを継承してサブインタフェースを定義することができるため、選択肢Cも正しいです。
Incorrect
不正解です!
実装クラスを宣言する構文は次のとおりです。
(構文)
[修飾子] class クラス名 implements インタフェース名 { }implements キーワードの後には、1つ以上のインタフェースを指定することができます。複数指定する場合は、「,」(カンマ)で区切ります。したがって、選択肢B、Eは正しいです。また、インタフェースを継承してサブインタフェースを定義することができるため、選択肢Cも正しいです。
-
Question 9 of 21
9. Question
次のコードがあります。
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
クラスAはインタフェースIを実装し、クラスBはクラスAを継承しています。つまり、クラスBはインタフェースIを型としてもっています。したがって、12行目のコードは問題なく、13行目のメソッド呼び出しも可能でり、8行目が実行されます。
Incorrect
不正解です。
クラスAはインタフェースIを実装し、クラスBはクラスAを継承しています。つまり、クラスBはインタフェースIを型としてもっています。したがって、12行目のコードは問題なく、13行目のメソッド呼び出しも可能でり、8行目が実行されます。
-
Question 10 of 21
10. Question
次のコードがあります。
13行目に挿入した際に、コンパイル、実行ともに成功するコードは次のどれですか。1つ選択してください。
Correct
正解です。
12行目では、 Bar クラスをインスタンス化した後、 Foo 型で宣言した obj 変数に代入しています。選択肢Bでは、 Foo クラスに show() メソッドが定義されているかチェックを行うためコンパイルエラーとなります。選択肢Dのように、 Bar 型にキャストすることでコンパイル、実行ともに成功します。
Incorrect
不正解です。
12行目では、 Bar クラスをインスタンス化した後、 Foo 型で宣言した obj 変数に代入しています。選択肢Bでは、 Foo クラスに show() メソッドが定義されているかチェックを行うためコンパイルエラーとなります。選択肢Dのように、 Bar 型にキャストすることでコンパイル、実行ともに成功します。
-
Question 11 of 21
11. Question
次のコードがあります。
コンパイルした結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
1行目から3行目までのクラス定義には問題ありません。しかし、6行目では、A型で宣言した変数にCクラスのオブジェクトを代入しようとしています。7行目も変数aをC型にキャストしてC型で宣言された変数に代入しようとしています。しかし、CクラスはAクラスを継承しているわけではないため、6~7行目でコンパイルエラーとなります。
Incorrect
不正解です。
1行目から3行目までのクラス定義には問題ありません。しかし、6行目では、A型で宣言した変数にCクラスのオブジェクトを代入しようとしています。7行目も変数aをC型にキャストしてC型で宣言された変数に代入しようとしています。しかし、CクラスはAクラスを継承しているわけではないため、6~7行目でコンパイルエラーとなります。
-
Question 12 of 21
12. Question
次のコードがあります。
コンパイルした結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
BクラスはAクラスを継承しています。したがって、6行目のコードはコンパイルに成功します。しかし、a変数に代入しているのは、5行目にあるとおりAクラスのオブジェクトです。したがって、実行時に間違ったキャストを行ったことを表す ClassCastException エラーが発生します。
Incorrect
不正解です。
BクラスはAクラスを継承しています。したがって、6行目のコードはコンパイルに成功します。しかし、a変数に代入しているのは、5行目にあるとおりAクラスのオブジェクトです。したがって、実行時に間違ったキャストを行ったことを表す ClassCastException エラーが発生します。
-
Question 13 of 21
13. Question
次のコードがあります。
7行目に挿入した場合に、 java.lang.ClassCastException 例外が発生するコードは次のどれですか。1つ選択してください。
Correct
正解です。
各クラスの継承、実装関係は、図8-17のとおりです。
6行目では、 Beta クラスをインスタンス化しているため、 Foo 型、 Alpha 型、 Beta 型で宣言された変数で扱うことが可能です。しかし、 Beta のサブクラスである Delta 型で扱うことはできません。したがって、選択肢Bの Delta 型へのキャストは誤りであり、実行時に ClassCastException エラーが発生します。
Incorrect
不正解です。
各クラスの継承、実装関係は、図8-17のとおりです。
6行目では、 Beta クラスをインスタンス化しているため、 Foo 型、 Alpha 型、 Beta 型で宣言された変数で扱うことが可能です。しかし、 Beta のサブクラスである Delta 型で扱うことはできません。したがって、選択肢Bの Delta 型へのキャストは誤りであり、実行時に ClassCastException エラーが発生します。
-
Question 14 of 21
14. Question
次のコードがあります。
コンパイルした結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
問題文ではインタフェースを2つ宣言しており、それらのインタフェースを実装しているのが Test クラスです。 implements キーワードの後には複数のインタフェースを指定することが可能です。また、2つのインタフェースには修飾子、戻り値の型、メソッド名、引数リストがまったく同じメソッドが宣言されていますが、文法上は問題ありません。したがって、コンパイルは成功します。
Incorrect
不正解です。
問題文ではインタフェースを2つ宣言しており、それらのインタフェースを実装しているのが Test クラスです。 implements キーワードの後には複数のインタフェースを指定することが可能です。また、2つのインタフェースには修飾子、戻り値の型、メソッド名、引数リストがまったく同じメソッドが宣言されていますが、文法上は問題ありません。したがって、コンパイルは成功します。
-
Question 15 of 21
15. Question
次のコードがあります。
コンパイルした結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
Dクラスは、インタフェースA、B、Cを実装しています。しかし抽象クラスであるため、インタフェースで宣言されているメソッドを実装していなくても問題ありません。しかし、Dクラスを継承しているEクラスは具象クラスであるため、すべてのメソッドを実装する必要があります。インタフェースで定義したメソッドはすべて暗黙で public メソッドとなるため、6行目の b() メソッドはアクセス修飾子のルールによりコンパイルエラーとなります。
Incorrect
不正解です。
Dクラスは、インタフェースA、B、Cを実装しています。しかし抽象クラスであるため、インタフェースで宣言されているメソッドを実装していなくても問題ありません。しかし、Dクラスを継承しているEクラスは具象クラスであるため、すべてのメソッドを実装する必要があります。インタフェースで定義したメソッドはすべて暗黙で public メソッドとなるため、6行目の b() メソッドはアクセス修飾子のルールによりコンパイルエラーとなります。
-
Question 16 of 21
16. Question
次のコードがあります。
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
インタフェースで定義したメソッドはすべて暗黙で public メソッドとなるため、10行目の foo() メソッドはアクセス修飾子のルールによりコンパイルエラーとなります。もし、10行目の定義を以下のように修正すると、コンパイル、実行ともに成功し、実行結果は「s:16」となります。
public void foo(int s) {
Incorrect
不正解です。
インタフェースで定義したメソッドはすべて暗黙で public メソッドとなるため、10行目の foo() メソッドはアクセス修飾子のルールによりコンパイルエラーとなります。もし、10行目の定義を以下のように修正すると、コンパイル、実行ともに成功し、実行結果は「s:16」となります。
public void foo(int s) {
-
Question 17 of 21
17. Question
正しい記述は次のどれですか。2つ選択してください。
Correct
正解です!
import 文、 package 文は必要に応じてソースファイルの先頭に記述します。したがって、選択肢Aは正しいです。ただし、1つのソースファイルに複数のクラスが定義されている場合、すべてのクラスに適用されるため、選択肢Bは誤りです。また、 import 文と package 文を両方定義する場合は、 package 文を先頭に定義する必要がありますが、 package 文は必須ではないため、選択肢Cは誤りです。 import 文は、パッケージ化されたクラスへのアクセスを簡素化するために使用するので、選択肢Dは正しく、選択肢Eは誤りです。
Incorrect
不正解です!
import 文、 package 文は必要に応じてソースファイルの先頭に記述します。したがって、選択肢Aは正しいです。ただし、1つのソースファイルに複数のクラスが定義されている場合、すべてのクラスに適用されるため、選択肢Bは誤りです。また、 import 文と package 文を両方定義する場合は、 package 文を先頭に定義する必要がありますが、 package 文は必須ではないため、選択肢Cは誤りです。 import 文は、パッケージ化されたクラスへのアクセスを簡素化するために使用するので、選択肢Dは正しく、選択肢Eは誤りです。
-
Question 18 of 21
18. Question
com.example パッケージに属する Test クラスを正しく定義するコードは次のどれですか。1つ選択してください。
Correct
正解です。
クラスをパッケージ化するには「package パッケージ名;」とします。選択肢AやDのような記述はできません。なお、選択肢Bは import キーワードを使用しているため、誤りです。
Incorrect
不正解です。
クラスをパッケージ化するには「package パッケージ名;」とします。選択肢AやDのような記述はできません。なお、選択肢Bは import キーワードを使用しているため、誤りです。
-
Question 19 of 21
19. Question
次の要件があります。
・クラス Test は、 com.se.kwd パッケージに属する
・クラス Test は、 com.se.kwd パッケージ以外のクラスから参照される
・クラス Test は、 com.se.sales パッケージのクラス群を利用するクラス Test を正しく定義するコードは次のどれですか。1つ選択してください。
Correct
正解です。
1つ目の要件により「package com.se.kwd;」宣言が必要であることがわかります。また2つ目の要件により、 Test クラスは public クラスである必要があることがわかります。さらに3つ目の要件により、「import com.se.sales.*;」宣言が必要であることがわかります。したがって、選択肢Cが正しいです。
Incorrect
不正解です。
1つ目の要件により「package com.se.kwd;」宣言が必要であることがわかります。また2つ目の要件により、 Test クラスは public クラスである必要があることがわかります。さらに3つ目の要件により、「import com.se.sales.*;」宣言が必要であることがわかります。したがって、選択肢Cが正しいです。
-
Question 20 of 21
20. Question
次のコードがあります。
foo() メソッドについて正しく説明しているものは次のどれですか。1つ選択してください。
Correct
正解です。
foo() メソッドは public 指定されています。また、 foo() メソッドは非 static メソッド(インスタンスメソッド)であるため、クラスをインスタンス化しなければ利用できません。しかし、 Foo クラス自体の定義に修飾子がなく、デフォルト修飾子で扱われます。したがって、このクラスを参照できるのは、同一パッケージ内のクラスのみとなり、選択肢Bが正しいです。
Incorrect
不正解です。
foo() メソッドは public 指定されています。また、 foo() メソッドは非 static メソッド(インスタンスメソッド)であるため、クラスをインスタンス化しなければ利用できません。しかし、 Foo クラス自体の定義に修飾子がなく、デフォルト修飾子で扱われます。したがって、このクラスを参照できるのは、同一パッケージ内のクラスのみとなり、選択肢Bが正しいです。
-
Question 21 of 21
21. Question
次のコードがあります。
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
非 static (インスタンス)メソッドを static メソッドでオーバーライドすることはできません。したがって、7行目のメソッド定義によりコンパイルエラーとなります。
Incorrect
不正解です。
非 static (インスタンス)メソッドを static メソッドでオーバーライドすることはできません。したがって、7行目のメソッド定義によりコンパイルエラーとなります。