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 { public void print() { X.super.print(); Y.super.print(); System.out.print("B"); } } 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. 実行時エラー
解答
l. XYBと表示される
解説
今回は クラスとインタフェースの挙動を復習する問題となっている。
クラスA には printメソッドが実装されているが、今回はクラスB はクラスA を継承していないため、解答には影響がない。
クラスB は インタフェースX および インタフェースY を実装している。インタフェースX およびインタフェースY にはそれぞれdefaultメソッドとしてprintメソッドが記述されている。
クラスB にも printメソッドが実装されており、インタフェースX およびインタフェースY のデフォルトメソッドをオーバーライドして実装している形となっている。
クラスB のprintメソッドにはX.super.print()と記載されているが、これは、インタフェースX のdefaultメソッドであるprintメソッドの呼び出し方として正しい。同様に、Y.super.print()によってインタフェースY のprintメソッドが呼び出される。
以上より、XYBと表示される。
java 8 からは、インタフェースにdefaultメソッドを定義できるようになっている。それにより、今までjavaでは不可能だった多重継承(のようなこと)ができるようになっている。
試験だけでなく実践でも混乱しやすい箇所なので、設計や実装時には十分に注意する必要がある。
オススメ!!→ java 8 の問題はこちら オススメ!!→ javaのプログラム作成形式の練習問題はこちら オススメ!!→ Macで日本語化済のEclipseを導入する方法その1 その2 オススメ!!→ java関連の記事はこちら