Tips

Java Silver 練習問題24

Java Silver 練習問題24

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

 

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

[java] interface MyInterface {
String message = "hello";
}
public class Sample implements MyInterface {
public static void main(String[] args) {
MyInterface obj = new MyInterface();
System.out.println(obj.message);
}
}
[/java]
  1. 「hello」と表示
  2. 何も表示されない
  3. コンパイルエラー
  4. 実行時エラー
  5. 1~4以外
解答はここをクリック!

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

インターフェイスはインスタンス化できません。

 

 

問題2

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

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

class Imp implements MyInterface {
public String getMessage() {
return message;
}
}

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

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

【解答 1:helloと表示】

こちらは問題なく表示されます。
インターフェイスを実装することにより、実装クラスでもmessageという変数が使えます。

 

 

問題3

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

[java] interface MyInterface {
String message = "hello";
String getMessage();
}

class Imp implements MyInterface {
@Override
String getMessage() {
return message;
}
}

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

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

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

コンパイルエラーの理由は前回のポイントでもあったアクセス修飾子です。
getMessageメソッドのアクセス修飾子の部分ですね。
インターフェイス側、実装クラス側ともにアクセス修飾子の記述なしのため、一見デフォルト同士で良さそうにみえます。
しかし、インターフェイスで宣言された変数やメソッドには暗黙的に「public」が付与されます。
したがって、オーバーライドする際には必ず「public」を付けなければいけません。

 

 

問題4

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

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

interface MyInterfaceB {
String getMessage();
}

class Imp implements MyInterfaceA, MyInterfaceB {
@Override
public String getMessage() {
return message;
}
}

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

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

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

ポイントは2つのインターフェイスを同時に実装しているところです。
2つのクラスを同時に継承することはできませんが、2つのインターフェイスを実装することは可能です。

 

 

問題5

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

[java] interface MyInterface {
String message = "";
}

class Imp implements MyInterface {
String getMessage() {
message = "hello";
return message;
}
}

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

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

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

インターフェイスで定義されたものはpublicということでしたが、変数はfinal修飾子も暗黙的に付与されます。
finalがついた変数に値を再代入しようとしているため、コンパイルエラーとなります。

 


前回の問題  次の問題

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

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search