【Java SE17 Silver 模擬試験】B-43

Java SE17 Silver 模擬試験
Java SE17 Silver 模擬試験

問題

次のコードの[ A ]に記述するとコンパイルエラーになるものはどれですか。(4つ選択)

interface MyType {
	int one = 1;
	static int two = 2;
	static final int three = 3;
}

class MyClass implements MyType {
	public static void main(String... args) {
		MyType t = new MyClass();
		//[ A ]
	}
}

選択肢

A) int c = three;
B) int h = t.two;
C) int b = two + 1;
D) int g = 1 + t.one;
E) int i = t.three++;
F) int f += MyType.three;
G) int e = MyType.two + +1;
H) int a = ++one;
I) int d = MyType.one;

解答

A) int c = three;
B) int h = t.two;
C) int b = two + 1;
D) int g = 1 + t.one;
E) int i = t.three++;
F) int f += MyType.three;
G) int e = MyType.two + +1;
H) int a = ++one;
I) int d = MyType.one;

解説

次のコードを見て、[ A ] に記述するとコンパイルエラーになるものを特定します。

コードの構成

  • MyType インターフェースには、いくつかの静的フィールドが定義されています。これらのフィールドは、staticfinal として扱われます。
  • インターフェースのフィールドは暗黙的に public static final であるため、インスタンスから直接アクセスすることはできませんが、クラス名を通じてアクセスすることができます。

各選択肢の検討

A)int c = three;
有効threestatic final フィールドで、インターフェース名なしでアクセスすることはできませんが、MyType.three と書けば有効です。

B)int h = t.two;
コンパイルエラーtwo はインターフェースの静的フィールドですが、インスタンス変数からは直接アクセスできません。

C)int b = two + 1;
有効two はインターフェースの静的フィールドで、MyType.two と書けば有効です。

D)int g = 1 + t.one;
有効onestatic final フィールドですが、インスタンスからアクセスしてもコンパイルエラーにはなりません。

E)int i = t.three++;
コンパイルエラーthreefinal フィールドのため、変更できません。

F)int f += MyType.three;
コンパイルエラー+= は初期化を必要とするため、int f が宣言されていないとエラーになります。

G)int e = MyType.two + +1;
有効two はインターフェースの静的フィールドとして正しくアクセスしています。

H)int a = ++one;
コンパイルエラーonefinal フィールドのため、変更できません。

I)int d = MyType.one;
有効one に対してクラス名を使ってアクセスすることも可能です。

前の問題へ SE17_B-42

次の問題へ SE17_B-44

対象資格:Java SE17 認定資格