2011-01-16 4 views

答えて

1

割り当てを作成するとき、割り当ての種類は、指定された型に基づいて推測されます。例えば。 MyInterface mi =新しいMyImplementation();この場合のmiはインタフェースとしてタイプされますが、実装を参照します。インスタンスを実行する場合、JVMはインスタンスが実装を指していることを認識します。

1

特定の質問に答える前に、インターフェイスの実装は、インターフェイスの種類が受け入れられているどこにでも渡すことができます。 ImplがInterface、Impl isAインターフェイスを実装している場合、なぜインターフェイスタイプにキャストするのですか?それはまったく必要ないでしょう。私はあなたが特定の実装にキャストする状況を見てきましたが、実装からインターフェースへと向かわず、そのような状況でさえ厄介です。

私は次のコードでこれを検証しなければなりませんでしたが、インターフェイスの実装があればインターフェイスにキャストします。実装が必要なものは、コンパイル時にエラーが発生します。インタフェース。ここにコードは

public class Runner { 

    public static void main(String[] args) { 

     ExampleImpl impl = new ExampleImpl(); // never do this in real life 
     // Example impl = new ExampleImpl() <-- do this instead "code to the interface" 
     Example casted = (Example) impl; 

     takesExampleImpl(casted); // compile error because takesImpl expects the implementation 
     takesExampleImpl(impl); // works because impl is an implementation 
     takesExampleImpl((ExampleImpl)casted); // works because I cast it back to imple 

    } 

    public static void takesExampleImpl(ExampleImpl instance){ 

    } 

    static class ExampleImpl implements Example { 

     public void testMethod() { 
      System.out.println("impl"); 
     } 
    } 
} 

例は単純なインターフェイスで、コードは示されていません。

また、私のコードは質問に答えていますが、多くのことが間違っています - あなたはプロの設定でそのようなコードが表示されません。インターフェイスのポイントは、動作を定義し、その動作に準拠したオブジェクトを渡すことができるようにすることです。したがって、実装を受け入れるメソッドを記述しない場合、実装を提供したものを渡すことができるインタフェースを受け入れるメソッドを記述します。そうすれば、必要な場合と同じ方法で別の実装を渡すことができます。

関連する問題