Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich hab mal wieder ne Frage. Diesmal geht es um Schnittstellen. Nehmen wir mla an, ich habe ich ein Interface Verhalten. Dieses enthält die Methode konkretesVerhalten().
Java:
public interface Verhalten(){
konkretesVerhalten();
}
Nun habe ich die Klasse A, die dieses Interface implementiert und die Methode konkretesVerhalten() überschreibt.
Java:
public class A implements Verhalten{
public void konkretesVerhalten(){
System.out.println("Hier sieht man das konkrete Verhalten !");
}
}
Nun will ich wiederum über eine andere Klasse folgendes machen:
Java:
public class B{
Verhalten refV = new A(); // Hierzu ist meine Frage, diese steht weiter unten
public void anzeigenVerhalten(){
refV. konkretesVerhalten();
}
}
Hier die Startklasse:
Java:
public class Applikation{
public static void main(String[] args){
B appl = new B();
appl.anzeigenVerhalten();
}
}
Die Ausgabe ist: Hier sieht man das konkrete Verhalten !
In der Zeile, in der ich einen Kommentar eingefügt habe, wird eine Referenzvariable des Interfaces Verhalten angelegt und diesem wird ein Objekt das Klasse A hinzugefügt. Dieses geht doch nur, weil nur A das Interfaces Verhalten implementiert oder? Wird zur Laufzeit dann einfach die Referenzvariable refV in mein Objekt der Klasse A umgewandelt?
Stimmt meine Vermutung?
Ich beschäftige mich nämliche gerade zum esrten Mal mit den Grundzügen von Entwurfsmustern (lese "Entwurfsmuster von Kopf bis Fuß" von O´reilly) und es ist aufrgudn der bessereen wartbarkeit und Erweiterbarkeit von programmen immer sinnvoll, auf den Supertypen und nicht auf die konkrete Implementierung hin zu programmieren.
In der Zeile, in der ich einen Kommentar eingefügt habe, wird eine Referenzvariable des Interfaces Verhalten angelegt und diesem wird ein Objekt das Klasse A hinzugefügt. Dieses geht doch nur, weil nur A das Interfaces Verhalten implementiert oder? Wird zur Laufzeit dann einfach die Referenzvariable refV in mein Objekt der Klasse A umgewandelt?
Umgewandelt wird da gar nichts. Die Variable sagt nur ich bin irgendwas vom Typ Verhalten. Damit kann sie eine Referenz zu jedem Objekt halten, das Typkompatibel zu Verhalten ist. A implementiert Verhalten und ist somit Typkompatibel.
Da refV mit einer Instanz von A initialisiert wird,
wird auch dessen Methode auf dem neu angelegtem
Objekt der Klasse A in deinem konkreten Beispiel
aufgerufen werden.
Hab nochmal schnell ne Frage. Wenn eine konkrete Klasse ein Interface implementiert, müssen dann eigentlich alle Methode in der Klasse implementiert werden, die im Interface enthalten sind?
Hab nochmal schnell ne Frage. Wenn eine konkrete Klasse ein Interface implementiert, müssen dann eigentlich alle Methode in der Klasse implementiert werden, die im Interface enthalten sind?
Ja, die Methoden eines Interface sind abstract und public. Die Aussage von deathbyaclown bezog sich auf Klassen, abstracte Klassen müssen die Methoden nicht implementieren.