【7】継承
Quiz-summary
0 of 16 questions completed
Questions:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
Information
問題(全16問)を始めるには下のボタンを押してください!
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 16 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
- Answered
- Review
-
Question 1 of 16
1. Question
Java における継承の説明として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
スーパークラスおよびサブクラスがインスタンス化可能な通常のクラスである場合、サブクラスでのオーバーライドは任意であるため選択肢Aは誤りです。選択肢Bはアクセス修飾子に関連する説明であるため誤りです。 Java では、単一継承のみサポートしているため、選択肢Cは誤りです。サブクラスでは、スーパークラスで定義された変数、メソッドを引き継ぐため、選択肢Dは正しいです。なお、コンストラクタは引き継ぎません。
Incorrect
不正解です。
スーパークラスおよびサブクラスがインスタンス化可能な通常のクラスである場合、サブクラスでのオーバーライドは任意であるため選択肢Aは誤りです。選択肢Bはアクセス修飾子に関連する説明であるため誤りです。 Java では、単一継承のみサポートしているため、選択肢Cは誤りです。サブクラスでは、スーパークラスで定義された変数、メソッドを引き継ぐため、選択肢Dは正しいです。なお、コンストラクタは引き継ぎません。
-
Question 2 of 16
2. Question
サブクラスの構成要素で、スーパークラスの構成要素と同じ名前にできるものは次のどれですか。1つ選択してください。
Correct
正解です。
サブクラスでは、スーパークラスで定義した同じ名前を持つメンバ変数、メンバメソッドを定義することができます。コンストラクタはクラス名と同じである必要があるため、選択肢C、選択肢Dは誤りです。
Incorrect
不正解です。
サブクラスでは、スーパークラスで定義した同じ名前を持つメンバ変数、メンバメソッドを定義することができます。コンストラクタはクラス名と同じである必要があるため、選択肢C、選択肢Dは誤りです。
-
Question 3 of 16
3. Question
Foo クラスと、Foo クラスのサブクラスである Bar クラスがあります。Foo クラスでは、 private 指定された exec() メソッドが定義されています。このメソッドにアクセスできるものは次のどれですか。3つ選択してください。
Correct
正解です!
private 指定されたメンバは、自クラス内からのみアクセスが可能であり、サブクラスであってもアクセスはできません。したがって、選択肢A、C、Dが正しいです。
Incorrect
不正解です!
private 指定されたメンバは、自クラス内からのみアクセスが可能であり、サブクラスであってもアクセスはできません。したがって、選択肢A、C、Dが正しいです。
-
Question 4 of 16
4. Question
次のコードがあります。
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
クラスAおよびクラスBはクラスXを継承しています。そして、Xクラスで宣言された val 変数は static 変数であるため、12行目により同じ val 変数がインクリメントされます。したがって、出力結果は選択肢Bとなります。
Incorrect
不正解です。
クラスAおよびクラスBはクラスXを継承しています。そして、Xクラスで宣言された val 変数は static 変数であるため、12行目により同じ val 変数がインクリメントされます。したがって、出力結果は選択肢Bとなります。
-
Question 5 of 16
5. Question
次のコードがあります。
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
3行目では、 A() コンストラクタが呼び出されると、2行目の static 変数である num 変数がインクリメントされます。また、7行目では、 B() コンストラクタが呼び出されると、6行目のインスタンス変数である num 変数がインクリメントされます。
12行目では、Bクラスのオブジェクトを3つ生成していますが、Bクラスの num 変数はインスタンス変数であるため、オブジェクトごとに保持されています。したがって、15行目で各オブジェクトの num 変数を出力していますが、すべて11となります。Incorrect
不正解です。
3行目では、 A() コンストラクタが呼び出されると、2行目の static 変数である num 変数がインクリメントされます。また、7行目では、 B() コンストラクタが呼び出されると、6行目のインスタンス変数である num 変数がインクリメントされます。
12行目では、Bクラスのオブジェクトを3つ生成していますが、Bクラスの num 変数はインスタンス変数であるため、オブジェクトごとに保持されています。したがって、15行目で各オブジェクトの num 変数を出力していますが、すべて11となります。 -
Question 6 of 16
6. Question
次のコードがあります。
①に入る修飾子で、有効なものは次のどれですか。2つ選択してください。
Correct
正解です!
問題文では、Aクラスで定義した funcA() メソッドを、サブクラスであるBクラスがオーバーライドしています。Aクラスの funcA() メソッドはアクセス修飾子として protected が指定されているため、オーバーライドの規則に従い、同じもしくはアクセス可能範囲が広い修飾子を指定しなくてはいけません。したがって、選択肢BとCが正しいです。
Incorrect
不正解です!
問題文では、Aクラスで定義した funcA() メソッドを、サブクラスであるBクラスがオーバーライドしています。Aクラスの funcA() メソッドはアクセス修飾子として protected が指定されているため、オーバーライドの規則に従い、同じもしくはアクセス可能範囲が広い修飾子を指定しなくてはいけません。したがって、選択肢BとCが正しいです。
-
Question 7 of 16
7. Question
次のコードがあります。
正しい記述は次のどれですか。1つ選択してください。
Correct
正解です。
Plant クラスでは引数をもつコンストラクタのみ定義されています。この Plant クラスを継承した Tree クラスはコンストラクタを定義していないため、コンパイル時に引数をもたないデフォルトコンストラクタが追加されます。
しかし、デフォルトコンストラクタ内では暗黙で super(); が追加されますが、現在 Plant クラスには引数をもたないコンストラクタが定義されていないため、コンパイルエラーとなります。したがって、選択肢Dのようにコードを修正すると、コンパイルが可能となります。Incorrect
不正解です。
Plant クラスでは引数をもつコンストラクタのみ定義されています。この Plant クラスを継承した Tree クラスはコンストラクタを定義していないため、コンパイル時に引数をもたないデフォルトコンストラクタが追加されます。
しかし、デフォルトコンストラクタ内では暗黙で super(); が追加されますが、現在 Plant クラスには引数をもたないコンストラクタが定義されていないため、コンパイルエラーとなります。したがって、選択肢Dのようにコードを修正すると、コンパイルが可能となります。 -
Question 8 of 16
8. Question
次のコードがあります。
10行目に挿入した際に、コンパイル、実行ともに成功するコードは次のどれですか。1つ選択してください。
Correct
正解です。
super() の呼び出しは、コンストラクタ定義内で先頭行に記述する必要があるため、選択肢Aは誤りで、選択肢Bは正しいです。Foo クラスには Foo(String datal) コンストラクタのみ定義されているため、サブクラスである Bar クラスでは、明示的にこのコンストラクタを呼び出さなければコンパイルエラーとなります。
したがって、選択肢C、選択肢Dは誤りです。また、 datal 変数はインスタンス変数であるため、選択肢Eのような「Foo.datal」の呼び出しはできません。Incorrect
不正解です。
super() の呼び出しは、コンストラクタ定義内で先頭行に記述する必要があるため、選択肢Aは誤りで、選択肢Bは正しいです。Foo クラスには Foo(String datal) コンストラクタのみ定義されているため、サブクラスである Bar クラスでは、明示的にこのコンストラクタを呼び出さなければコンパイルエラーとなります。
したがって、選択肢C、選択肢Dは誤りです。また、 datal 変数はインスタンス変数であるため、選択肢Eのような「Foo.datal」の呼び出しはできません。 -
Question 9 of 16
9. Question
次のコードがあります。
8行目に挿入する有効なコードは次のどれですか。2つ選択してください。
Correct
正解です!
Threeクラスは、 Two クラスを継承し、 foo() メソッドをオーバーライドしています。オーバーライドの規則に従い、戻り値はスーパークラスと同じものか、その戻り値の型のサブクラスでなければいけません。現在スーパークラスでは、 One 型となっているため、 One もしくは Two、 Three が指定可能です。したがって、選択肢C、Dが正しいです。
Incorrect
不正解です!
Threeクラスは、 Two クラスを継承し、 foo() メソッドをオーバーライドしています。オーバーライドの規則に従い、戻り値はスーパークラスと同じものか、その戻り値の型のサブクラスでなければいけません。現在スーパークラスでは、 One 型となっているため、 One もしくは Two、 Three が指定可能です。したがって、選択肢C、Dが正しいです。
-
Question 10 of 16
10. Question
次のコードがあります。
5行目に挿入する有効なコードは次のどれですか。5つ選択してください。
Correct
正解です!
選択肢Aは、正しくオーバーライドしています。
選択肢C、E、F、Gは、継承関係ではありますがオーバーロードとして扱われるため、正しいです。
選択肢Bは、オーバーライドのアクセス修飾子の規則に違反するため、誤りです。
選択肢Dは、オーバーライドの戻り値の規則に違反するため、誤りです。Incorrect
不正解です!
選択肢Aは、正しくオーバーライドしています。
選択肢C、E、F、Gは、継承関係ではありますがオーバーロードとして扱われるため、正しいです。
選択肢Bは、オーバーライドのアクセス修飾子の規則に違反するため、誤りです。
選択肢Dは、オーバーライドの戻り値の規則に違反するため、誤りです。 -
Question 11 of 16
11. Question
次のコードがあります。
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
Bar クラスは Foo クラスを継承しており、6行目では super によるメソッド呼び出しを記述しています。しかし、5行目のメソッド宣言を確認すると method() は static メソッドであることがわかります。つまり static メンバからオブジェクトを表す super を使用しているため、コンパイルエラーとなります。このような static メンバからスーパークラスの static メンバを使用するのであれば、6行目を以下のように変更します。これでコンパイル、実行ともに成功し、実行結果は「12 6」となります。
int c = Foo.method(a, b); // クラス名を指定する
Incorrect
不正解です。
Bar クラスは Foo クラスを継承しており、6行目では super によるメソッド呼び出しを記述しています。しかし、5行目のメソッド宣言を確認すると method() は static メソッドであることがわかります。つまり static メンバからオブジェクトを表す super を使用しているため、コンパイルエラーとなります。このような static メンバからスーパークラスの static メンバを使用するのであれば、6行目を以下のように変更します。これでコンパイル、実行ともに成功し、実行結果は「12 6」となります。
int c = Foo.method(a, b); // クラス名を指定する
-
Question 12 of 16
12. Question
次のコードがあります。
実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
12行目のYクラスのインスタンス化により、9行目が呼び出されます。10行目では this() の呼び出しがあるため、8行目が呼び出されます。また、8行目では super(6) の呼び出しがあるため、3行目が呼び出されます。また、4行目では this() 呼び出しがあるため、2行目が呼び出されます。したがって、最初に出力されるのは1となります。後は呼び出し元に順番に戻るため、実行結果は選択肢Cとなります。
Incorrect
不正解です。
12行目のYクラスのインスタンス化により、9行目が呼び出されます。10行目では this() の呼び出しがあるため、8行目が呼び出されます。また、8行目では super(6) の呼び出しがあるため、3行目が呼び出されます。また、4行目では this() 呼び出しがあるため、2行目が呼び出されます。したがって、最初に出力されるのは1となります。後は呼び出し元に順番に戻るため、実行結果は選択肢Cとなります。
-
Question 13 of 16
13. Question
次のコードがあります。
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
this() の呼び出しは、コンストラクタ定義内で先頭行に記述する必要があるため、8行目によりコンパイルエラーです。なお、7行目と8行目が逆に記載されていればコンパイル、実行ともに成功し、出力結果は 3:6 となります。
Incorrect
不正解です。
this() の呼び出しは、コンストラクタ定義内で先頭行に記述する必要があるため、8行目によりコンパイルエラーです。なお、7行目と8行目が逆に記載されていればコンパイル、実行ともに成功し、出力結果は 3:6 となります。
-
Question 14 of 16
14. Question
次のコードがあります。
コードの説明として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
7行目では、 Test クラスをインスタンス化し、 foo() メソッドを呼び出しています。 foo() メソッドでは自クラス内に定義した private な bar() メソッドを呼び出していますが、問題ありません。したがって、コンパイルは成功します。なお、何も出力はしませんが、実行も可能です。
Incorrect
不正解です。
7行目では、 Test クラスをインスタンス化し、 foo() メソッドを呼び出しています。 foo() メソッドでは自クラス内に定義した private な bar() メソッドを呼び出していますが、問題ありません。したがって、コンパイルは成功します。なお、何も出力はしませんが、実行も可能です。
-
Question 15 of 16
15. Question
次のコードがあります。
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
各クラスは継承関係があり、引数をもたないコンストラクタを定義しています。各コンストラクタ内には、明示的に super() や this() を呼び出す記述がないため、暗黙で super() 呼び出しが追加されます。したがって、実行結果は選択肢Dのようにスーパークラスから出力されます。
Incorrect
不正解です。
各クラスは継承関係があり、引数をもたないコンストラクタを定義しています。各コンストラクタ内には、明示的に super() や this() を呼び出す記述がないため、暗黙で super() 呼び出しが追加されます。したがって、実行結果は選択肢Dのようにスーパークラスから出力されます。
-
Question 16 of 16
16. Question
キーワードである this の説明として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
this キーワードは自オブジェクトを表します。なお、 super キーワードはスーパークラスのオブジェクトを表します。
Incorrect
不正解です。
this キーワードは自オブジェクトを表します。なお、 super キーワードはスーパークラスのオブジェクトを表します。