Wie viele Klassen können beim Erstellen und der Schnittstelle die Schnittstelle implementieren?
Wenn die Antwort mehr als eins ist, wie weiß Java dann, welche Implementierungen verwendet werden sollen, wenn Sie den Aufruf an die Schnittstelle tätigen (die Implementierung nicht direkt aufrufen)?Java Interface-Konzept
Antwort
Wie viele Klassen können die Schnittstelle implementieren?
So viele, wie Sie brauchen.
Wenn die Antwort mehr als eins ist, wie weiß Java dann, welche Implementierungen zu verwenden sind, wenn Sie den Aufruf an die Schnittstelle tätigen (die Implementierung nicht direkt aufrufen)?
Hier hilft Wissen über late binding (auch bekannt als dynamische Bindung).
Lassen Sie uns sagen, dass Sie Schnittstelle und Klassen, die sie implementieren wie
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");
}
}
Sie haben auch Code wie
Animal a1 = new Cat();
Animal a2 = new Dog();
a1.makeSound();
a2.makeSound();
Ergebnis, das Sie sehen, ist
mew
woof
kommt es vor, weil body/code der Methode .makeSound()
wird gesucht (und aufgerufen) zur Laufzeit (nicht Kompilierungszeit). Dies ist möglich, da jedes Objekt sich an seine Klasse erinnert, so dass das Objekt a1
als Referenz weiß, dass es eine Instanz von Cat
ist und das Objekt von a2
als Instanz von Dog
gehalten wird.
Also kurz gesagt, wenn Sie tun:
a1.makeSound();
- JVM Objekt nimmt die
a1
hält, - dann das Objekt um seine Klasse fragt (in diesem Fall wird es erfahren, dass es Instanz von
Cat
ist Klasse) - Dann greift es auf diese Klasse (
Cat.class
Datei) und sucht nach CodemakeSound()
(wenn eine solche Methode nicht gefunden wird, dann wird davon ausgegangen, dass es vererbt werden muss, wird es versuchen, s Suchen Sie in der Oberklasse nach - und wenn es diese Methode finden wird, ruft es Code von ihm auf.
Sehr gut gesagt. Vielen Dank. – MarkoRocko
@MarkoRocko Gern geschehen. Ich habe vergessen, hinzuzufügen, dass dank dieses Mechanismus wir Polymorphismus in Java haben. Außerdem gibt es 3 Ausnahmen von der dynamischen Bindung, wenn Sie '.someMethod()' aufrufen.Die erste Ausnahme, wenn Code zur Kompilierungszeit gesetzt wird und nicht dynamisch zur Laufzeit durchsucht wird, ist, wenn die Methode "final" ist (da sie nicht überschrieben werden kann, ist es sinnlos, sie zur Laufzeit zu suchen). Der zweite Fall ist, wenn die Methode "privat" ist (da auf private Methoden nur innerhalb der Klasse zugegriffen wird, die den Zugriff auf private Methoden aus anderen Klassen unmöglich macht). – Pshemo
@MarkoRocko Der dritte Fall ist, wenn die Methode "statisch" ist, weil 'reference.staticMethod()' zur Kompilierzeit in 'ReferenceType.staticMethod()' geändert wird. – Pshemo
- 1. Java-Prozessabsturz - Java-Finalizer
- 2. fülle java Pane - JAVA
- 3. - JAVA
- 4. Android-java vs PC-Java
- 5. JAVA - LString Java, verknüpfte Strings
- 6. Java-Getter aktivieren Java-Getter
- 7. Unterschied zwischen Java und Java
- 8. Java-Streams in Java 7
- 9. die gleiche Geschwindigkeit wie Java von Java
- 10. Java SE eingebettet und Java ME
- 11. Messzeit in Java JNI (nativer Aufruf Java)
- 12. MongoDB Java - Abfrage auf mongodb Java-Treiber
- 13. Java zu XSD oder XSD zu Java
- 14. Richtig: Java "Enterprise" Edition = Java "Internet" Edition?
- 15. java -javaagent: Druck Befehl java Verwendung Richtlinien
- 16. Java: Methoden wie ord PHP in Java
- 17. wie SAML sso mit Java, Java EE
- 18. Datei .java aus einem Java-Programm kompilieren?
- 19. Java-Funktionen in Java serialisieren 8
- 20. Kompilieren von externen .java-Dateien aus Java
- 21. Rahmen Java-Systemeigenschaften auf eine Java-Anwendung
- 22. Java-Code Ausführen von innen Java
- 23. Java Klassenname, der mit Java beginnt
- 24. Java-Programm mit Java beenden Ergebnis: 137
- 25. Java: Java-Quellcode analysieren, Methoden extrahieren
- 26. Convert Java Servlet in Standalone-Java-Anwendung
- 27. Java instanziiert Short-Objekt in Java
- 28. Java 32bit Xmx vs Java 64bit Xmx
- 29. Java-Code zum Umbenennen von Java-Paketen
- 30. Java 8 Leistung VS. Java 7
Sie sagen Java, welche Implementierung es verwenden soll! – user2004685
Wenn Sie 'import' verwenden, teilen Sie Java mit, welche Implementierung verwendet werden soll. – MaxG
Eine unbegrenzte Anzahl kann die Schnittstelle implementieren und beim Festlegen einer Referenz einen konkreten Typ angeben. –