2

次のインターフェースと実装クラスがあるとします。

public interface MyInterface {
  public String getSomething ();
}

public class MyImplementation implements MyInterface {

   @Override
   public String getSomething () {
      return "Someting";
   } 

   public String getOtherThing () {
      return "otherThing";
   }
}

そして、いくつかのクライアント コード:

MyInterface objectViaMyInt = new MyImplementation();

objectViaMyInt.getSometing();   //WORKS, OF COURSE
objectViaMyInt.getOtherThing(); //DOESNT WORK, OF COURSE
objectViaMyInt.toString();      // WORKS TOO

だから、私はこれの精神を理解していると思います。.. すべてのオブジェクトはオブジェクトであり、これらの重要なメソッドを継承する必要があります。しかし、これは実際にどのように機能するのでしょうか? 継承とインターフェイス (型) ベースのアクセスに関する通常の規則に従うことができないようです。. .

4

1 に答える 1

11

しかし、これは実際にどのように機能するのでしょうか?

言語レベルでは、JLS セクション 9.2に次のように記載されているため、機能します。

インターフェイスに直接のスーパーインターフェイスがない場合、インターフェイスは、署名 s、戻り値の型 r、および throws 句 t を持つ各パブリック インスタンス メソッド m に対応する、シグネチャ s、戻り値の型 r、および throws 句 t を持つパブリック抽象メンバー メソッド m を暗黙的に宣言します。ただし、同じシグネチャ、同じ戻り値の型、および互換性のある throws 句を持つメソッドがインターフェイスによって明示的に宣言されている場合を除きます。

JVM レベルでは、JVM はインターフェースのすべてのインスタンスが明らかにオブジェクトでなければならないという知識を使用するだけでよいため、通常の方法で適切なメンバー実装を取得できます。

于 2012-10-31T16:21:03.593 に答える