Java 8 練習問題 その27


java練習問題

java練習問題

動作環境と問題内容について

javaの練習問題です。 出題範囲はjava 8 で追加された範囲を中心とします。難易度は Java SE 8 Programmer I の試験と同程度※を想定しています。

※ただし、場合によっては同試験には出題されない内容や形式が含まれることもあります。あくまでも難易度の目安として解答してください。

実行環境は以下の通りです。

JDKのバージョン:java 8 Update181

 

※問題文に書いてあるプログラムを実行する際は自己責任で実行してください。

問題

次のプログラムを作成した。コンパイル、実行に関して以下の問いに答えなさい。

 

プログラム(Sample.java)

public class Sample{
    public static void main(String[] args){
        B b = new B();
        b.print();
    }
}

class A {
    public void print(){
        System.out.print("A");
    }
}

class B implements X, Y {
    public void print(){
        System.out.print("B");
    }
}

interface X {
    default void print(){
        System.out.print("X");
    }
}

interface Y extends X {
    default void print(){
        System.out.print("Y");
    }
}

 

問.Sample.javaをコンパイル、実行するとどうなるか。下記の選択肢 a ~ o から正しいものを選べ。

選択肢

a. Aと表示される

b. Bと表示される

c. ABと表示される

d. Xと表示される

e. XAと表示される

f. XBと表示される

g. Yと表示される

h. YAと表示される

i. YBと表示される

j. XYと表示される

k. XABと表示される

l. XYBと表示される

m. XYABと表示される

n. コンパイルエラー

o. 実行時エラー

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

解答

 

b. Bと表示される

 

解説

今回は クラスとインタフェースの挙動を復習する問題となっている。

クラスA には printメソッドが実装されているが、今回はクラスB はクラスA を継承していないため、解答には影響がない。

クラスB は インタフェースX および インタフェースY を実装している。インタフェースX およびインタフェースY にはそれぞれdefaultメソッドとしてprintメソッドが記述されている。

クラスB にも printメソッドが実装されており、インタフェースX およびインタフェースY のデフォルトメソッドをオーバーライドして実装している形となっている。

以前の問題(その24)で似たような問題を出題しているが、その時とはインタフェースY の実装が異なっており、今回のインタフェースY はインタフェースX を継承している。

インタフェースY がインタフェースX を継承している部分には文法上の誤りはなく、問題なくコンパイル・実行が可能となっている。

 

以上より、Bと表示される。

java 8 からは、インタフェースにdefaultメソッドを定義できるようになっている。それにより、今までjavaでは不可能だった多重継承(のようなこと)ができるようになっている。

試験だけでなく実践でも混乱しやすい箇所なので、設計や実装時には十分に注意する必要がある。

 


 <<前回の問題はこちら   次の問題はこちら>> 


 オススメ!!→ java 8 の問題はこちら

 オススメ!!→ javaのプログラム作成形式の練習問題はこちら

 オススメ!!→ Macで日本語化済のEclipseを導入する方法その1 その2

 オススメ!!→ java関連の記事はこちら

  • このエントリーをはてなブックマークに追加

PAGE TOP