# Java理解度確認問題 3
### 設問 1-1 クラスの継承:オーバーライド
以下のようなクラスSuperが定義されている。
~~~Java
class Super {
public String methodA() {}
}
~~~
既存のクラスSuperから継承を使って新しいクラスSubを定義する。
~~~Java
class Sub extends Super {
// methodA()をオーバーライドする
}
~~~
クラスSubでmethodA()をオーバーライドする場合、
正しい記述を以下から一つ選択せよ。
#### 選択肢 1-1 クラスの継承:コンストラクタとオーバーライド
---
1. `private String methodA(){}`
2. `public String methodA{}() {}`
3. `public void method(String s){}`
4. `public String methodB(){}`
---
### 設問 1-2 クラスの継承:コンストラクタ
以下のようなクラスSuperが定義されている。
~~~Java
class Super {
int count;
public Super(int count) {
this.count = count;
}
public void print() {
}
}
~~~
既存のクラスSuperから継承を使って新しいクラスSubを定義する。
~~~Java
class Sub extends Super {
}
~~~
クラスSubでコンストラクタを実装する場合、
正しい記述を以下から一つ選択せよ。
#### 選択肢 1-2
---
1. `private Sub(){}`
2. `public Sub(int count){}`
3. `public Sub(){super(100);}`
4. `public Sub(){}`
---
### 設問 1-3 クラスの継承:コンストラクタ
以下のようなクラスSuperが定義されている。
~~~Java
class Super {
private int count;
public Super(int count) {
this.count = count;
}
// 略
}
~~~
既存のクラスSuperから継承を使って新しいクラスSubを定義する。
~~~Java
class Sub extends Super {
private String name;
public Sub(String name) {
this.name = name;
}
// 略
void print() {
System.out.print("count = " + count + " / ");
System.out.println("name = " + name);
}
}
~~~
以下のコードを実行した結果、正しいものを選択せよ。
~~~Java
class Main {
public static void main(String[] args) {
Super s = new Sub("test");
s.print();
}
}
~~~
#### 選択肢 1-3
1. コンパイルエラー
2. `count = 0 / name = test`が表示される
3. `name = test`が表示される
4. 実行時エラーが発生して何も表示されない
### 設問 1-4 継承の利用
以下のようにクラスを定義してある。
~~~Java
class Super {
public void print() {
System.out.println("Superのメソッドprint()");
}
}
class Sub extends Super {
public void print() {
System.out.println("Subのメソッドprint()");
}
}
~~~
クラスSuper,Subを使った以下のコードを作成した。
~~~Java
class Main {
public static void main(String[] args) {
Super obj = new Sub();
obj.print();
}
}
~~~
Mainクラスを実行した結果について正しいものを選択せよ。
#### 選択肢 1-4
---
1. 実行時エラーが発生し、エラーメッセージが表示される
2. 「Superのメソッドprint()」が表示される
3. 「Subのメソッドprint()」が表示される
4. 「Superのメソッドprint()」、「Subのメソッドprint()」が両方表示される
---
## 抽象クラス
### 1-5 抽象クラスの利用
以下のような抽象クラスを定義した。
~~~Java
abstract class Base {
abstract void print();
}
~~~
抽象クラスを継承した具象クラスを以下のように定義する。
~~~Java
class A extends Base {
public void print() {
System.out.println("A");
}
}
class B extends Base {
public void print() {
System.out.println("B");
}
}
~~~
以下のコードを実行した場合、正しい結果を選択せよ。
~~~Java
class Main {
public static void main(String[] args) {
List<Base> list = new ArrayList<Base>();
list.add(new A());
list.add(new A());
list.add(new B());
list.add(new A());
list.add(new B());
for(Base b : list) {
b.print();
}
}
}
~~~
#### 選択肢 1-5
1. コンパイルエラーが発生して実行できない
2. listのaddメソッドを最初に実行した際に実行時エラーが発生して何も表示されない
3. forループのブロック中のprintメソッドを最初に実行した際に実行時エラーが発生して何も表示されない
4. 「A」「A」「B」「A」「B」の5行が表示される
## インターフェースの利用
### 設問 1-6 インターフェースの利用
以下のようなinterfaceが定義されている。
~~~Java
interface A {
String getName();
}
interface B {
int getNumber();
}
~~~
Interface A, Bを実装するクラスを以下のように定義した。
~~~Java
class Test implements A, B {
public String getName() {
return "test";
}
public int getNumber() {
return 999;
}
}
~~~
クラス Testを使った以下のプログラムを実行した場合の結果、
正しいものを選択せよ。
~~~Java
class Main {
public static void main(String[] args) {
Test t = new Test();
Strign name = t.getName();
System.out.println(name);
int num = t.getNumber();
System.out.println(num);
}
}
~~~
#### 選択肢 1-6
---
1. コンパイルエラーが発生し実行できない
2. 「test」だけ表示され、getNumber()実行時に実行時エラーが発生する
3. getName()実行時に実行時エラーが発生し、何も表示されない
4. 「test」「999」の2行が表示される
---
## コレクション
### 設問 1-7 リスト
以下のようなコードを実行した場合の結果として正しいものを選択せよ。
~~~Java
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("A");
list.add("AA");
list.add("AAA");
for (String data : list) {
System.out.println(data);
}
}
}
~~~
#### 選択肢 1-7
---
1. コンパイルエラーが発生し実行できない。
2. "A","AA","AAA"の順で3行表示される
3. "A","AA"が表示された後、実行時エラーが発生してプログラムの実行が終わる
4. 実行時エラーが起きて何も表示されずプログラムの実行が終わる
---
### 設問 1-8 マップ
以下のようなコードを実行した場合の結果として正しいものを選択せよ。
~~~Java
public class Sample {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(1, "AAA");
map.put(2, "BBB");
map.put(3, "CCC");
map.put(2, "DDD");
for (Integer key : map.keySet()) {
System.out.println(map.get(key));
}
}
}
~~~
#### 選択肢 1-8
---
1. コンパイルエラーが発生し実行できない
2. "AAA","BBB","CCC","DDD"の順で4行表示される
3. "AAA","DDD","CCC"の順で3行表示される
4. "AAA","BBB"が表示された後、実行時エラーが発生してプログラムの実行が終わる
---
## 例外
### 設問 1-9
以下のようなコードをコンパイル,実行した結果として正しいものを答えよ。
~~~Java
class Main {
public static void main(String[] args) {
int x = 22;
int y = 0;
int result = 0;
try {
result = x / y;
System.out.println(result);
} catch (ArithmeticException e) {
System.out.println("0除算実行");
} catch (Exception e) {
System.out.println("Exception発生");
} finally {
System.out.println("実行終了");
}
}
}
~~~
#### 選択肢 1-9
---
1. コンパイルエラーが発生し実行できない
2. 「0除算実行」「実行終了」の2行が表示される
3. 「0除算実行」「Exception発生」の2行が表示される
4. 「実行終了」のみが表示される
---
#### 設問 1-10
以下のようなコードがある。
~~~Java
class Test {
public void generateException() [1]{
// 略
[2]_____________________; // <=こにコードを埋める
}
}
~~~
[1][2]に、例外(Exception)を発生させるコードとして正しいものを選択せよ。
#### 選択肢 1-10
---
1. [1] `throws Exception` / [2]`return Exception;`
2. [1] `throws Exception` / [2]`throw new Exception();`
3. [1] 何も書かない [2] `throw new Exception();`
4. [1] `throw new Exception()` / [2] `throw Exception;`
---