インタフェースに型キャストされたコンクリートクラスですが、JVMはまだコンクリートクラスのインスタンスと見なしていますか?コンクリートクラスはインタフェースを実装します。後でインターフェイスに型キャストされました。 JVMはTypecastedインスタンスをどのように認識しますか?
0
A
答えて
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");
}
}
}
例は単純なインターフェイスで、コードは示されていません。
また、私のコードは質問に答えていますが、多くのことが間違っています - あなたはプロの設定でそのようなコードが表示されません。インターフェイスのポイントは、動作を定義し、その動作に準拠したオブジェクトを渡すことができるようにすることです。したがって、実装を受け入れるメソッドを記述しない場合、実装を提供したものを渡すことができるインタフェースを受け入れるメソッドを記述します。そうすれば、必要な場合と同じ方法で別の実装を渡すことができます。
関連する問題
- 1. どのようにIEnumeratorインターフェイスを実装しますか?
- 2. socket.ioは認証をどのように実装しますか
- 3. 「万セント」はどのように実装されましたか?
- 4. uint8_tはデータ型として認識されますが、u8は認識されません。どうして?
- 5. 継承コンクリートクラスを使用したC++でのインターフェイスの実装
- 6. JVMはIdentityHashMapをどのように実装していますか?
- 7. イテレータを認識するコンパイラはどのように実装できますか?
- 8. 私のインタフェースAの実装では、インタフェースB型のインスタンスを返したいと思っています。
- 9. インターフェイスはどのように機能を実装していますか?
- 10. どのようにして、Pythonはプリコンパイルされた共有ファイルを認識するようにしますか?
- 11. どのようにOSGiインターフェイスがゲートウェイに認識されるようになりましたか?
- 12. Mefは、実行時に指定されたインタフェースを実装するすべての型をインポートします。
- 13. XmlResourceParser:inferfaceはインターフェイスを実装しますか?
- 14. インターフェイス機能/ "キャスト"はgolangで実際に何をしますか?
- 15. Facebookはどのようにチャットサイドバーを実装しましたか?
- 16. 匿名認証をどのように実装しますか?
- 17. Zopeインターフェイスはどのように実装されていますか?
- 18. Javaインターフェイスはどのように内部実装されていますか? (vtables?)
- 19. インスタンスがActionScript 3.0でインタフェースを実装しているかどうかを確認するには
- 20. aspはどのようにユーザーを認識しますか?
- 21. MPlayerはMJPEGストリームをどのように認識しますか?
- 22. 実装されたモックの半分をflowtypeの型にキャストできますか?
- 23. Goでインタフェース変数がどのように実装されていますか?
- 24. Javaインタフェースのコンテンツを変更するためにAOPはどのように実装されていますか?
- 25. ドメインモデリング - プロパティまたはPOCOのインターフェイスを実装しますか?
- 26. ネガ画像はどのように認識されますか?
- 27. Xは変数ですが、キャストしようとしたときに型のように使用されます
- 28. これでバイナリツリーをどのように実装しますか?
- 29. DocTypeはCSSが認識されないようにします
- 30. JVMは実際にオブジェクトをキャストし、ClassCastExceptionを発行しますか?