---
# System prepended metadata

title: Java理解度確認問題 3

---

# 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;`
---
