Tips

Java Silver 練習問題25

Java Silver 練習問題25

Java Silverに関する問題を出題していきます!

 

問題1
次のプログラムをコンパイル、実行した結果として正しいものはどれか。

[java] interface Greeting {
String message = "hello";
}

class Imp implements Greeting {}

public class Practice25_Q1 {
public static void main(String[] args) {
Imp obj1 = new Imp();
Imp obj2 = new Imp();
System.out.println(obj1.message == obj2.message);
}
}
[/java]

  1. 「true」と表示
  2. 「false」と表示
  3. コンパイルエラー
  4. 実行時エラー
  5. 1~4以外
解答はここをクリック!

【解答 1:「true」と表示】

インターフェイスに定義された変数は暗黙的に「public」「static」「final」の修飾子が付与されます。
messageはstaticなので、obj1とobj2で同一の参照先となります。

 

 

問題2

次のプログラムをコンパイル、実行した結果として正しいものはどれか。

[java] interface Greeting {
char[] message = {‘h’, ‘e’, ‘l’, ‘l’, ‘o’};
}
class Imp implements Greeting {}

public class Practice25_Q2 {
public static void main(String[] args) {
Imp obj1 = new Imp();
obj1.message[0] = ‘こ’;
obj1.message[1] = ‘ん’;
obj1.message[2] = ‘に’;
obj1.message[3] = ‘ち’;
obj1.message[4] = ‘は’;
Imp obj2 = new Imp();
System.out.println(obj1.message == obj2.message);
}
}
[/java]

  1. 「true」と表示
  2. 「false」と表示
  3. コンパイルエラー
  4. 実行時エラー
  5. 1~4以外
解答はここをクリック!

【解答 1:「true」と表示】

インターフェイスでchar型の配列が定義されています。
ということは「public」「static」「final」の修飾子が付与されているということです。
しかし、配列の文字を変更していますがコンパイルエラーはでません。
今回変更されたのは配列の要素であって、messageが参照する配列自体に変更はありません。
そしてstaticで宣言されているため、obj2にも変更が反映されます。

 

 

問題3

次のプログラムをコンパイル、実行した結果として正しいものはどれか。

[java] interface Greeting {
String message = "hello";
void greet() {
System.out.println("hello");
}
}

class Imp implements Greeting {}

public class Practice25_Q3 {
public static void main(String[] args) {
Imp obj = new Imp();
obj.greet();
}
}
[/java]

  1. 「hello」と表示
  2. 何も表示されない
  3. コンパイルエラー
  4. 実行時エラー
  5. 1~4以外
解答はここをクリック!

【解答 3:コンパイルエラー】

インターフェイスに定義できるメソッドは抽象メソッドのみです。
通常のメソッドを定義することはできません。

 

 

問題4

次のプログラムをコンパイル、実行した結果として正しいものはどれか。

[java] interface English {
String message = "hello";
}

interface Japanese {
String message = "こんにちは";
}
class Imp implements English, Japanese {
void greet() {
System.out.println(message);
}
}
public class Practice25_Q4 {
public static void main(String[] args) {
Imp obj = new Imp();
obj.greet();
}
}
[/java]

  1. 「hello」と表示
  2. 「こんにちは」と表示
  3. 何も表示されない
  4. コンパイルエラー
  5. 実行時エラー
解答はここをクリック!

【解答 4:コンパイルエラー】

インターフェイスを同時に実装することができますが、今回は2つのインターフェイスに同じ名前の変数が定義されています。
この場合どちらのメッセージか区別がつかなくなってしまうためコンパイルエラーとなります。
エラーメッセージは「フィールドmessageはあいまいです」と表示されます。

 

 

問題5

次のプログラムをコンパイル、実行した結果として正しいものはどれか。

[java] interface English {
String message = "hello";
}

interface Japanese {
String message = "こんにちは";
}

class Imp implements English, Japanese {
void greet() {
System.out.println(English.message);
}
}

public class Practice25_Q5 {
public static void main(String[] args) {
Imp obj = new Imp();
obj.greet();
}
}
[/java]

  1. 「hello」と表示
  2. 「こんにちは」と表示
  3. 何も表示されない
  4. コンパイルエラー
  5. 実行時エラー
解答はここをクリック!

【解答 1:「hello」と表示】

問題4と違い今回は表示されます。
問題4ではmessageがどちらのインターフェイスのものを指しているのか区別がつかなかったためコンパイルエラーでした。
しかし、インターフェイス名.変数名で区別をつけることができるため、「hello」と表示されます。

 


前回の問題  次の問題

新連載はじまりました!新Java基礎 連載リンク

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search