【6】クラス定義とオブジェクトの生成・使用
Quiz-summary
0 of 18 questions completed
Questions:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
Information
問題(全18問)を始めるには下のボタンを押してください!
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 18 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
- Answered
- Review
-
Question 1 of 18
1. Question
クラスの定義として、正しい説明は次のどれですか。2つ選択してください。
Correct
正解です!
main() メソッドをもたないクラスも定義可能であるため、選択肢Aは誤りです。また、1つのソースファイル内に複数のクラス定義も可能であるため、選択肢Bは誤りです。ただし、選択肢Cのように public なクラスの名前はソースファイル名と同じにしなければならないため、1つのソースファイルに public 指定されたクラスを複数定義することはできません。クラスは参照型の1つでもあるため、選択肢Dは誤りです。メソッドを定義しない変数のみのクラスも言語仕様上は問題ないため、選択肢Eは正しいです。
Incorrect
不正解です!
main() メソッドをもたないクラスも定義可能であるため、選択肢Aは誤りです。また、1つのソースファイル内に複数のクラス定義も可能であるため、選択肢Bは誤りです。ただし、選択肢Cのように public なクラスの名前はソースファイル名と同じにしなければならないため、1つのソースファイルに public 指定されたクラスを複数定義することはできません。クラスは参照型の1つでもあるため、選択肢Dは誤りです。メソッドを定義しない変数のみのクラスも言語仕様上は問題ないため、選択肢Eは正しいです。
-
Question 2 of 18
2. Question
次のコードがあります。
5行目に挿入した際に、コンパイル、実行ともに成功するコードは次のどれですか。1つ選択してください。
Correct
正解です。
var 変数は基本データ型である boolean 型で宣言されているため、値の比較には、「==」を使用します。また、「””」で囲むと文字列として扱われるため true リテラルをそのまま使用している選択肢Cが正しいです。
Incorrect
不正解です。
var 変数は基本データ型である boolean 型で宣言されているため、値の比較には、「==」を使用します。また、「””」で囲むと文字列として扱われるため true リテラルをそのまま使用している選択肢Cが正しいです。
-
Question 3 of 18
3. Question
次のコードがあります。
実行する際は次とします。
java Test kei bill
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
4行目で宣言した name 変数には、 bill が代入されます。しかし、6行目では、 obj 変数が参照するオブジェクトのインスタンス変数である name (つまり、2行目で宣言した変数)にアクセスするため、選択肢Bの「hana」が出力されます。
Incorrect
不正解です。
4行目で宣言した name 変数には、 bill が代入されます。しかし、6行目では、 obj 変数が参照するオブジェクトのインスタンス変数である name (つまり、2行目で宣言した変数)にアクセスするため、選択肢Bの「hana」が出力されます。
-
Question 4 of 18
4. Question
次のコードがあります。
2行目に挿入した際に、コンパイル、実行ともに成功するコードは次のどれですか。1つ選択してください。
Correct
正解です。
10行目では、 Foo クラスのオブジェクトに対し、 method() メソッドを呼び出しています。その際、引数として int 型の値を2つ渡しています。またメソッドを実行した結果、 int 型の配列が返されていることがわかります。したがって、メソッドの定義は選択肢Dが正しいです。
Incorrect
不正解です。
10行目では、 Foo クラスのオブジェクトに対し、 method() メソッドを呼び出しています。その際、引数として int 型の値を2つ渡しています。またメソッドを実行した結果、 int 型の配列が返されていることがわかります。したがって、メソッドの定義は選択肢Dが正しいです。
-
Question 5 of 18
5. Question
次のコードがあります。
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
4行目では、 Test クラスをインスタンス化し、5行目で x 変数を引数に go() メソッドを呼び出しています。8行目では引数である5を受け取り、9行目が実行されます。しかし、 x++ とあるため、5を出力した後、インクリメントされます。注意する点は、この x 変数は8行目から10行目までが有効範囲であることです。したがって、制御が6行目に戻って「x」の値を出力していますが、この「x」は3行目で宣言された x 変数であるため、出力結果は5です。
Incorrect
不正解です。
4行目では、 Test クラスをインスタンス化し、5行目で x 変数を引数に go() メソッドを呼び出しています。8行目では引数である5を受け取り、9行目が実行されます。しかし、 x++ とあるため、5を出力した後、インクリメントされます。注意する点は、この x 変数は8行目から10行目までが有効範囲であることです。したがって、制御が6行目に戻って「x」の値を出力していますが、この「x」は3行目で宣言された x 変数であるため、出力結果は5です。
-
Question 6 of 18
6. Question
次のコードがあります。
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
2~3行と5行目でそれぞれ x 変数と y 変数が宣言されています。8行目では while 文で3回インクリメントとデクリメントを行っていますが、対象は5行目で宣言した変数となります。したがって、ループ処理が終了した後の実行結果は選択肢Aとなります。
Incorrect
不正解です。
2~3行と5行目でそれぞれ x 変数と y 変数が宣言されています。8行目では while 文で3回インクリメントとデクリメントを行っていますが、対象は5行目で宣言した変数となります。したがって、ループ処理が終了した後の実行結果は選択肢Aとなります。
-
Question 7 of 18
7. Question
次のコードがあります。
3行目に挿入した際に、コンパイルが成功するコードは次のどれですか。4つ選択してください。
Correct
正解です!
選択肢A、C、Fは、適切にオーバーロードされます。選択肢Dは、メソッド名が違うので異なるメソッドとなり、定義可能です。選択肢B、E、Gは、引数の型、数、並びが同じなので、正常なオーバーロードとみなされません。
Incorrect
不正解です!
選択肢A、C、Fは、適切にオーバーロードされます。選択肢Dは、メソッド名が違うので異なるメソッドとなり、定義可能です。選択肢B、E、Gは、引数の型、数、並びが同じなので、正常なオーバーロードとみなされません。
-
Question 8 of 18
8. Question
次のコードがあります。
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
5行目にある func(10,20) の呼び出しにより、2行目が実行されます。引数で受け取った値を足し算していますが、 float 型で受け取っているため、出力結果は 30 ではなく 30.0 です。また、続けて func(“a”,”b”) の呼び出しにより、3行目が実行されます。文字列に対して+演算子を使用しているため、文字列結合となります。したがって、実行結果は選択肢Eとなります。
Incorrect
不正解です。
5行目にある func(10,20) の呼び出しにより、2行目が実行されます。引数で受け取った値を足し算していますが、 float 型で受け取っているため、出力結果は 30 ではなく 30.0 です。また、続けて func(“a”,”b”) の呼び出しにより、3行目が実行されます。文字列に対して+演算子を使用しているため、文字列結合となります。したがって、実行結果は選択肢Eとなります。
-
Question 9 of 18
9. Question
次のコードがあります。
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
Foo クラスの2行目、3行目は戻り値が指定されているため、コンストラクタではなくメソッドとして扱われています。したがって、コンパイル、実行ともに成功しますが、7行目のように Foo クラスをインスタンス化しても2行目が呼び出されることはありません。
Incorrect
不正解です。
Foo クラスの2行目、3行目は戻り値が指定されているため、コンストラクタではなくメソッドとして扱われています。したがって、コンパイル、実行ともに成功しますが、7行目のように Foo クラスをインスタンス化しても2行目が呼び出されることはありません。
-
Question 10 of 18
10. Question
次のコードがあります。
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
2~3行目はコンストラクタとして定義されているため、コンパイル、実行ともに成功します。したがって、7行目のインスタンス化により2行目が実行されます。なお、3行目にある private 指定されたコンストラクタは定義可能ですが、自クラス以外(他クラス)からは呼び出せません。
Incorrect
不正解です。
2~3行目はコンストラクタとして定義されているため、コンパイル、実行ともに成功します。したがって、7行目のインスタンス化により2行目が実行されます。なお、3行目にある private 指定されたコンストラクタは定義可能ですが、自クラス以外(他クラス)からは呼び出せません。
-
Question 11 of 18
11. Question
デフォルトのアクセス修飾子の説明として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
各アクセス修飾子の意味は次のとおりです。
public : どのクラスからでも利用可能
protected : このクラスを継承したサブクラス、もしくは同一パッケージ内のクラスから利用可能
デフォルト(指定なし) : 同一パッケージ内のクラスからのみ利用可能
private : 同一クラス内からのみ利用可能Incorrect
不正解です。
各アクセス修飾子の意味は次のとおりです。
public : どのクラスからでも利用可能
protected : このクラスを継承したサブクラス、もしくは同一パッケージ内のクラスから利用可能
デフォルト(指定なし) : 同一パッケージ内のクラスからのみ利用可能
private : 同一クラス内からのみ利用可能 -
Question 12 of 18
12. Question
次のコードがあります。
2行目に挿入した際に有効なカプセル化を実現するコードは次のどれですか。1つ選択してください。
Correct
正解です。
一般的に、メンバ変数は private にし、メンバメソッドは public にすることを推奨されています。したがって、選択肢Cが適切な変数宣言です。
Incorrect
不正解です。
一般的に、メンバ変数は private にし、メンバメソッドは public にすることを推奨されています。したがって、選択肢Cが適切な変数宣言です。
-
Question 13 of 18
13. Question
private修飾子を使用可能なメンバは次のどれですか。3つ選択してください。
Correct
正解です!
public およびデフォルトは、クラス、コンストラクタ、変数、メソッドに指定可能ですが、 protected および private はコンストラクタ、変数、メソッドに指定可能です。クラスには指定できないので注意してください。なお、ローカル変数や制御文にアクセス修飾子は指定できないため、選択肢C、Dは誤りです。
Incorrect
不正解です!
public およびデフォルトは、クラス、コンストラクタ、変数、メソッドに指定可能ですが、 protected および private はコンストラクタ、変数、メソッドに指定可能です。クラスには指定できないので注意してください。なお、ローカル変数や制御文にアクセス修飾子は指定できないため、選択肢C、Dは誤りです。
-
Question 14 of 18
14. Question
クラス内に定義したメンバの説明として正しいものは次のどれですか。2つ選択してください。
Correct
正解です。
static メソッドからインスタンスメソッドを直接呼び出すことができないため、選択肢Bは誤りです。なお、 static メソッド内で、クラスをインスタンス化し「参照変数名.メソッド名()」とすれば、インスタンスメソッドを呼び出すことは可能です。また、インスタンス変数はオブジェクトごとに用意されるため、選択肢Dは誤りです。
Incorrect
不正解です。
static メソッドからインスタンスメソッドを直接呼び出すことができないため、選択肢Bは誤りです。なお、 static メソッド内で、クラスをインスタンス化し「参照変数名.メソッド名()」とすれば、インスタンスメソッドを呼び出すことは可能です。また、インスタンス変数はオブジェクトごとに用意されるため、選択肢Dは誤りです。
-
Question 15 of 18
15. Question
次のコードがあります。
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
5行目は、 static メソッド内から static 変数へのアクセスであり、8行目は、インスタンスメソッド内から static メソッドへのアクセスであるためともに問題ありません。また、 main() メソッド側では、 Test クラスをインスタンス化した後、12行目、13行目で obj 変数を使用した各メソッドの呼び出しをしていますが、問題ありません。12行目により、インクリメントされた a 変数の値である「1」が出力され、13行目により、現在「1」が格納されている a 変数が、再度インクリメントされ「2」が出力されます。
Incorrect
不正解です。
5行目は、 static メソッド内から static 変数へのアクセスであり、8行目は、インスタンスメソッド内から static メソッドへのアクセスであるためともに問題ありません。また、 main() メソッド側では、 Test クラスをインスタンス化した後、12行目、13行目で obj 変数を使用した各メソッドの呼び出しをしていますが、問題ありません。12行目により、インクリメントされた a 変数の値である「1」が出力され、13行目により、現在「1」が格納されている a 変数が、再度インクリメントされ「2」が出力されます。
-
Question 16 of 18
16. Question
次のコードがあります。
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
5行目で引数に num 変数を指定し8行目のメソッドを呼び出していますが、この calc()メソッドは戻り値を返しません。つまり、 10 + 100 = 110 の値は main() メソッド側に戻らないため、6行目の実行結果は 10 となります。
Incorrect
不正解です。
5行目で引数に num 変数を指定し8行目のメソッドを呼び出していますが、この calc()メソッドは戻り値を返しません。つまり、 10 + 100 = 110 の値は main() メソッド側に戻らないため、6行目の実行結果は 10 となります。
-
Question 17 of 18
17. Question
次のコードがあります。
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
static な main() メソッドから非 static メソッドである methodA() を直接呼び出すことはできません。したがって、コンパイルエラーとなります。 methodA() メソッドを static メソッドに変更すると、コンパイル、実行ともに成功し、出力は 2 となります。また、 main() メソッド内を次のように変更しても、同様の結果を得られます。
Public static void main(String[] args) {
Test t = new Test();
t.methodA(); t.methodB();
System.out.println(num);
}Incorrect
不正解です。
static な main() メソッドから非 static メソッドである methodA() を直接呼び出すことはできません。したがって、コンパイルエラーとなります。 methodA() メソッドを static メソッドに変更すると、コンパイル、実行ともに成功し、出力は 2 となります。また、 main() メソッド内を次のように変更しても、同様の結果を得られます。
Public static void main(String[] args) {
Test t = new Test();
t.methodA(); t.methodB();
System.out.println(num);
} -
Question 18 of 18
18. Question
次のコードがあります。
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
Correct
正解です。
9行目により、 obj1 オブジェクトの lang 変数の値は「C」、 operation 変数の値は「Unix」です。また、10行目により、 obj2 オブジェクトの lang 変数の値は「C」、 operation 変数の値は「Solaris」です。そして、11行目により obj2 オブジェクトの lang 変数の値は「Java」となります。しかし、lang 変数は static 変数であるため、 obj1 オブジェクトも同じデータを参照しています。したがって、実行結果は選択肢Eとなります。
Incorrect
不正解です。
9行目により、 obj1 オブジェクトの lang 変数の値は「C」、 operation 変数の値は「Unix」です。また、10行目により、 obj2 オブジェクトの lang 変数の値は「C」、 operation 変数の値は「Solaris」です。そして、11行目により obj2 オブジェクトの lang 変数の値は「Java」となります。しかし、lang 変数は static 変数であるため、 obj1 オブジェクトも同じデータを参照しています。したがって、実行結果は選択肢Eとなります。