2016-06-22 7 views
-7

質問:Test16の参照はMy3(行A)の変数m1にあり、Test17クラスの関数show()はインターフェイスMy3の関数show()とは関係ありません。 次に、Test17クラスのshow()関数がm1によってどのように実行されるかについて説明します。次のように コードは次のとおりです。クラスAはBを継承しますC

class Test17{ 
     public void show(){ 
      System.out.println("Show1"); 
     } 
    } 
    class Test16 extends Test17 implements My3 { 
     public static void main(String[] args){ 
      My3 m1=new Test16();//<----Line A 
      m1.show(); 
     } 
    } 
    interface My3{ 
     public abstract void show(); 
    } 

コードを次の出力がある:それはTest17がMY3を実装することは重要ではありませんShow1

+3

'Test16'が' My3'を実装するためには、メソッド 'public void show()'を提供する必要があります。そのようなメソッドはそのスーパークラスで定義されているため、そうします。だから 'Test17.show'は' Test16'クラスに 'My3.show'の実装を提供します。 – khelwood

+0

特に、変数 'm1'によって参照されるオブジェクトは 'Test17'であるが、より具体的には' Test16'であることに注意してください。それは 'Test17.show()'と 'My3.show()'を結びつけるものです。 –

+0

ありがとうございます。私は今それを得ました。 – Napa

答えて

0

、メソッドのシグネチャは同じであるので、それは働きます!このメソッドは、インターフェイスを実装する子に継承されます。

  • My3はshow()を定義するインタフェースです。

  • m1の実装はTest16です。 Test17:

  • Test16をTest17が(そしてそれは方法だ)ショーが呼び出される

、ショーの唯一の実装()Test16の親で発見され継承されます。

0

クラスTest16はクラスTest17を拡張しているので、クラスTest16 IS-A a Test17はクラスTest16がクラスTest17の子であることを意味し、Test17のすべてのプロパティと動作を継承します。あなたは、インタフェースMY3を実装し、そのも(体付き)クラスTest17にある同じシグネチャのメソッドを、持っている場合今Test16は、

public void show(){ 
     System.out.println("Show1"); 
    } 

今の方法を持って、今、このメソッドはクラスTest16であるのために拡張する。

デフォルトでは、クラスTest17を拡張することにより、クラスTest17のクラスTest17によるインターフェイスメソッドの実装を提供します。インタフェースメソッドとクラスTest17メソッドの両方が同じシグネチャを持つため

関連する問題