Javaの認定資格「Oracle Certified Java Programmer, Gold SE 7」。通称JavaGoldのオリジナル問題を紹介していきたいと思います。
前回の解答
まずは、前回の解答から。
正解は「(4)」となります。
間違っている選択肢がないと思われた方も多いかもしれませんが、final指定された変数(=定数)は初期値の代入を宣言時にしておかなくても問題ありません。
実際のサンプルプログラムを見てみましょう。
package techpjin;
public class Lesson8 {
public static void main(String[] args) {
Test t = new Test();
}
}
class Test {
private static final int a;
static{
a = 100;
}
}
定数は10行目で定義していますが、初期値を設定していません。実際に値を設定しているのは13行目のstaticイニシャライザの中です。このようにstatic finalな変数(=定数)であればstaticイニシャライザで、非static finalな変数であればインスタンスイニシャライザの中であれば初期化を行うことが可能です。
ややイレギュラーな使い方ですが、頭の片隅にいれておきましょう。
なお、それ以外の選択肢に関してはfinal修飾子の基本的な用法ですので、確実に抑えておきたいところです。
それでは引き続きfinal修飾子に関する問題です。
問9
次のプログラムのコンパイルエラーの原因として正しいものを全て選んでください。
package techpjin;
public class Lesson9 {
public static void main(String[] args) {
String s = new ExString();
Integer i = new ExInteger();
Number n = new ExNumber();
}
}
class ExString extends String{
}
class ExInteger extends Integer{
}
class ExNumber extends Number{
}
- ExStringのインスタンスをStringクラスの変数に代入できない
- Stringクラスを継承してクラスを作ることはできない
- Integerクラスを継承してクラスを作ることはできない
- Numberクラスを継承してクラスを作ることはできない
- ExNumberクラスにはabstract修飾子をつける必要がある
- ExNumberクラスではいくつかのメソッドをオーバーライドしなくてはいけない
問9の解答・解説と問10はこちら