Tips

java練習問題

java練習問題

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

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

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

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

JDKのバージョン:java 8 Update171

 

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

問題

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

 

プログラム(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 {
    /* 何も記述しない */
}

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

interface Y {
    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. 実行時エラー

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

解答

 

n. コンパイルエラー

 

解説

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

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

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

クラスB には、インタフェースX もインタフェースYも直接実装されており、クラスB のprintメソッドがインタフェースX とインタフェースY の、どちらのprintメソッドを指しているのか判別することができない。

 

以上より、コンパイルエラーが発生する。

※参考:インタフェースY が以下のようになっている場合は、コンパイル可能。問題文のインタフェースY を以下のものに置き換えた場合、Yと表示される。

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

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

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

 


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


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

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

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

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

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

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search