java練習問題
java練習問題
動作環境と問題内容について
javaの練習問題です。 出題範囲はjava 8 で追加された範囲を中心とします。難易度は Java SE 8 Programmer I の試験と同程度※を想定しています。
※ただし、場合によっては同試験には出題されない内容や形式が含まれることもあります。あくまでも難易度の目安として解答してください。
実行環境は以下の通りです。
JDKのバージョン:java 8 Update172
※問題文に書いてあるプログラムを実行する際は自己責任で実行してください。
問題
次のプログラムを作成した。コンパイル、実行に関して以下の問いに答えなさい。
プログラム(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 extends A 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. AXと表示される
f. BXと表示される
g. Yと表示される
h. AYと表示される
i. BYと表示される
j. XYと表示される
k. ABXと表示される
l. BXYと表示される
m. ABXYと表示される
n. コンパイルエラー
o. 実行時エラー
解答
a. Aと表示される
解説
今回は クラスとインタフェースの挙動を復習する問題となっている。
クラスB は クラスA を継承し、インタフェースX および インタフェースY を実装している。
クラスA には printメソッドが実装されており、インタフェースX および インタフェースY にはデフォルトメソッドとして printメソッドが記述されている。
クラスB には何も実装されていないが、親クラスであるクラスA から継承された printメソッドが実装されていることになる。また、親クラスA から継承されたprintメソッドであったとしても、クラスBに printメソッドが実装されていることに違いはない。
そのため、クラスB はインタフェースX および インタフェースY のそれぞれに対して、デフォルトメソッドをオーバーライドしている形となっており、問題なくコンパイル、実行できる。
実行時の挙動は、クラスA の printメソッドに書いてある通り。
以上より、Aと表示される。
java 8 からは、インタフェースにdefaultメソッドを定義できるようになっている。それにより、今までjavaでは不可能だった多重継承(のようなこと)ができるようになっている。
試験だけでなく実践でも混乱しやすい箇所なので、設計や実装時には十分に注意する必要がある。
オススメ!!→ 過去のjava 8 の問題はこちら オススメ!!→ javaのプログラム作成形式の練習問題はこちら オススメ!!→ Macで日本語化済のEclipseを導入する方法その1 その2 オススメ!!→ java関連の記事はこちら