ビルドしてインターフェイスするとき、インターフェイスを実装できるクラスの数はいくつですか?
答えが複数の場合、javaはインターフェイスへの呼び出し時(実装を直接呼び出さない)にどの実装を使用するかをどのように知っていますか?Javaインターフェイスの概念
答えて
インターフェイスを実装できるクラスの数はいくつですか?
必要なだけ多く
答えが複数の場合、Javaはインターフェイスへの呼び出し時(実装を直接呼び出さない)にどの実装を使用するかをどのように知っていますか?
ここでは、late binding(動的バインディングとも呼ばれます)についての知識が役立ちます。
あなたが表示されます
Animal a1 = new Cat();
Animal a2 = new Dog();
a1.makeSound();
a2.makeSound();
結果は、それが起こる
mew
woof
であるように、あなたはまた、コードを持って
interface Animal{
void makeSound();
}
class Cat implements Animal{
public void makeSound(){
System.out.println("mew");
}
}
class Dog implements Animal{
public void makeSound(){
System.out.println("woof");
}
}
のようにそれを実装するインタフェースとクラスをしていると言うことができますボディ/コードの方法.makeSound()
が実行時に(コンパイル時ではない)が検索されている(呼び出されている)。各オブジェクトがそのクラスを覚えているので、a1
が保持するオブジェクトがCat
のインスタンスであり、a2
が保持するオブジェクトがDog
のインスタンスであることが分かるため、可能です。
だから、要するにあなたが行うとき:
a1.makeSound();
- JVMは、そのクラスについてそのオブジェクトを要求し、その後
- 、
a1
が保持するオブジェクトを受け取り(この場合には、それはそれはCat
のインスタンスであることを学びます。クラスCat.class
ファイル)にアクセスし、makeSound()
のコードを探しています(そのようなメソッドが見つからない場合、継承されている必要があるとみなされます)。スーパークラスでそれを調べる) - このメソッドが見つかると、そこからコードが呼び出されます。
非常によく言った。ありがとうございました。 – MarkoRocko
@MarkoRocko大歓迎です。私は、Javaで多形性を持つこのメカニズムのおかげで、それを追加することを忘れてしまった。また、 '.someMethod()'を呼び出すときに動的バインディングから3つの例外があります。コンパイル時にコードが設定され、実行時に動的に検索されない場合の最初の例外は、メソッドが 'final'のときです(実行時に*検索*するためのポイントがオーバーライドされないためです)。第2のケースは、メソッドが 'private'の場合です(プライベートメソッドは他のクラスのプライベートメソッドを宣言してアクセスすることは不可能です)。 – Pshemo
@MarkoRocko第3のケースは、 'reference.staticMethod()'がコンパイル時に 'ReferenceType.staticMethod()'に変更されたため、メソッドがstaticの場合です。 – Pshemo
- 1. 概念
Javaにどの実装を使用すべきかを教えてください! – user2004685
あなたが 'import'を使うときは、どの実装を使うべきかをJavaに伝えます。 – MaxG
無制限の数では、インターフェイスを実装し、参照を設定するときに具体的な型を指定することができます。 –