Interfaces in Java
Verfasst: 07.01.2012 19:19
Ich habe mal ein bisschen in Java hineingeschaut und bin nach kurzer Zeit auf ein erstes Hindernis gestoßen, nämlich auf Interfaces. Ich poste mein Problem hier im PB-Forum, weil ich in keinem Java-Forum angemeldet bin und weil ich, wie gesagt, nur mal in Java reinschnuppern will.
Hier also mein Problem: Ich habe eine Superklasse Tier und davon abgeleitet die Unterklassen Loewe und Katze, wobei Katze noch das Interface Haustier implementiert, das die abstrakte Methode streicheln() enthält. In meiner Startklasse erzeuge ich nun das polymorphe Array meineTierList[]. Der Compiler steigt in der Zeile meineTierListe[1].streicheln() aus. Mir ist klar, dass die Methode streicheln() nicht in der Klasse Tier enthalten ist. Aber ich dachte, das ist gerade der „Witz“ von Interfaces, dass man – bezogen auf mein Beispiel - Haustier-Methoden (also streicheln) auf eine Tier-Referenz (also meineTierListe) anwenden kann. Habe ich da irgendwo einen Syntax-Fehler gemacht oder den Dreh mit den Interfaces nicht verstanden?
Hier also mein Problem: Ich habe eine Superklasse Tier und davon abgeleitet die Unterklassen Loewe und Katze, wobei Katze noch das Interface Haustier implementiert, das die abstrakte Methode streicheln() enthält. In meiner Startklasse erzeuge ich nun das polymorphe Array meineTierList[]. Der Compiler steigt in der Zeile meineTierListe[1].streicheln() aus. Mir ist klar, dass die Methode streicheln() nicht in der Klasse Tier enthalten ist. Aber ich dachte, das ist gerade der „Witz“ von Interfaces, dass man – bezogen auf mein Beispiel - Haustier-Methoden (also streicheln) auf eine Tier-Referenz (also meineTierListe) anwenden kann. Habe ich da irgendwo einen Syntax-Fehler gemacht oder den Dreh mit den Interfaces nicht verstanden?
Code: Alles auswählen
class Tier {
public void toeneMachen() {
System.out.println("diese Methode wird ueberschrieben");
}
}
interface Haustier {
public abstract void streicheln();
}
class Loewe extends Tier {
public void toeneMachen() {
System.out.println("Roaaar!");
}
}
class Katze extends Tier implements Haustier {
public void toeneMachen() {
System.out.println("Miau!");
}
public void streicheln() {
System.out.println("Ich lasse mich gerne streicheln");
}
}
public class Start {
public static void main (String[] args) {
Tier[] meineTierListe = new Tier[2];
meineTierListe[0] = new Loewe();
meineTierListe[1] = new Katze();
meineTierListe[0].toeneMachen();
meineTierListe[1].toeneMachen();
meineTierListe[1].streicheln();
}
}