OCJP Silver SE 7 模試1回目 つづき
前回の続きです。
問題
コンパイル、実行した結果として正しいものを1つ選択。
- A X X X
- B X Y X
- C X Y Y
- D Y Y Y
- E コンパイルエラー
- F 実行時エラー
解答:E
正答:D
問題見たとき、interface ZにはtoString()の定義無いやん!アクセスできないやん!!
これはコンパイルエラーで間違いない!!!
なんて思ったのでしょう。だがしかし、interfaceもclassと同様に継承してない場合は
デフォルトでObjectが親になるので、Objectが持っているtoString()メソッドであれば、
参照することができるという罠でした。
※toString()ではなくて、独自のメソッドならコンパイルエラーに。
問題
コンパイル、実行ともに成功させるために修正する箇所はどこか。1つ選択。
- A 2行目の A() の private を削除する
- B 5行目の B() の private を削除する
- C 6行目の play() メソッドを public にする
- D 6行目の play() メソッドを static にする
- E いずれも該当しない
解答:B
正答:A
コンストラクタがprivateだからやろ〜と条件反射でBを選択しちゃいました。
mainメソッドと同一のクラスだからprivateで問題ないわけで、
スーパークラスのコンストラクタが暗黙的にサブクラスのコンストラクタを呼び出す際に
privateだとアクセスできないと。
Aの通り、privateを削除するか、選択肢には無いけどprotectedにすればOKだった。
問題
コンパイル、実行した結果として正しいものを1つ選択。
- A Class A Class A
- B Class B Class A
- C Class A Class B
- D Class B Class B
- E コンパイルエラー
- F 実行時エラー
解答:E
正答:D
キャストの方向を勘違いしていた様子。7行目がダウンキャスト obj1 = obj2;
なら
コンパイルエラーになるが、問題のコードはアップキャストだから問題なしでした。
問題
コンパイル、実行した結果として正しいものを1つ選択。
- A ArrayIndexOutOfBoundsException が発生する
- B IllegalArgumentException が発生する
- C NullPointerException が発生する
- D StringIndexOutOfBoundsException が発生する
- E 0 が出力される
- F -1 が出力される
解答:A
正答:D
インデックスが範囲を超えたものはみんなArrayIndexOutOfBoundsExceptionだと思ってました。
無知を晒しました(・∀・)
問題
3行目にコードを挿入してコンパイルが成功するものはどれか3つ選択
- A throws IOException { }
- B throws Exception { }
- C throws SQLException { }
- D throws FileNotFoundException { }
- E { }
解答:A,B,E
正答:A,D,E
throwsを使用しているメソッドをオーバーライドする際の決まり
- サブクラスのメソッドがthrowする例外はスーパークラスのメソッドがthrowする例外と同じか、
その例外クラスのサブクラスであること。 - RuntimeExceptionクラスおよびRuntimeExceptionクラスとそのサブクラスの例外は、
スーパークラスのメソッドがthrowする例外に関係なくサブクラスでthrowできる。 - スーパークラスのメソッドにthrowsが有ってもサブクラスで必ず書く必要はない。
1番目の関係性を逆に考えてました。
やっぱり模試を解いてみると理解が甘い点がはっきりと浮き彫りになりますね(´・_・`)
明日は白本の模試を解いてみたいと思います。