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