Java 8 練習問題 その18


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 abstract void print();
}

 

問.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では不可能だった多重継承(のようなこと)ができるようになっている。

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

 

 

 

 

 

 オススメ!!→ Macに日本語化済のEclipseを導入する方法はこちら

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

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

java 8 関連の練習問題はこちら

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

PAGE TOP