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 { public void print(){ super.print(); System.out.print("B"); } } interface X { public default void print(){ System.out.print("X"); } }
問.Sample.javaをコンパイル、実行するとどうなるか。下記の選択肢 a ~ j から正しいものを選べ。
選択肢
a. Aと表示される
b. Bと表示される
c. ABと表示される
d. Xと表示される
e. AXと表示される
f. BXと表示される
g. ABXと表示される
h. XABと表示される
i. コンパイルエラー
j. 実行時エラー
解答
c. ABと表示される
解説
今回は クラスとインタフェースの挙動を復習する問題となっている。
クラスB は クラスA を継承し、インタフェースX を実装している。
クラスA には printメソッドが実装されており、インタフェースX にはデフォルトメソッドとして printメソッドが記述されている。
クラスB にも printメソッドが実装されているが、これは親クラスである クラスA に対してはprintメソッドをオーバーライドしている形となっている。また、インタフェースX に対しても、デフォルトメソッドをオーバーライドしている形となっている。
クラスの作り方として矛盾がなく、問題なくコンパイル、実行できる。
実行時の挙動は、クラスB の printメソッドに書いてある通り。キーワード「super」は、クラスB の親クラスである クラスA のことを指していることになる。
以上より、ABと表示される。
java 8 からは、インタフェースにdefaultメソッドを定義できるようになっている。それにより、今までjavaでは不可能だった多重継承(のようなこと)ができるようになっている。
試験だけでなく実践でも混乱しやすい箇所なので、設計や実装時には十分に注意する必要がある。
オススメ!!→ java 8 の問題はこちら オススメ!!→ javaのプログラム作成形式の練習問題はこちら オススメ!!→ Macで日本語化済のEclipseを導入する方法その1 その2 オススメ!!→ java関連の記事はこちら