Tips

Java Silver 練習問題24

Java Silver 練習問題24

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

 

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

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);
    }
}
  1. 「hello」と表示
  2. 何も表示されない
  3. コンパイルエラー
  4. 実行時エラー
  5. 1~4以外
解答はここをクリック!

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

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

 

 

問題2

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

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);
    }
}
  1. 「hello」と表示
  2. 何も表示されない
  3. コンパイルエラー
  4. 実行時エラー
  5. 1~4以外
解答はここをクリック!

【解答 1:helloと表示】

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

 

 

問題3

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

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);
    }
}
  1. 「hello」と表示
  2. 何も表示されない
  3. コンパイルエラー
  4. 実行時エラー
  5. 1~4以外
解答はここをクリック!

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

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

 

 

問題4

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

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);
    }
}
  1. 「hello」と表示
  2. 何も表示されない
  3. コンパイルエラー
  4. 実行時エラー
  5. 1~4以外
解答はここをクリック!

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

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

 

 

問題5

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

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);
    }
}
  1. 「hello」と表示
  2. 何も表示されない
  3. コンパイルエラー
  4. 実行時エラー
  5. 1~4以外
解答はここをクリック!

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

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

 


前回の問題  次の問題

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

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search