Eine Frage begzl. Interface / Polymorphie

Status
Nicht offen für weitere Antworten.

pabu1983

Mitglied
Hallo Java Community,

ich arbeite mich gerade in Java ein mit Hilfe des Buches "Java von Kopf bis Fuß" und muss sagen das es echt ein gutes Buch ist. Allerdings hänge ich an einer Stelle und hoffe das es mir jemand von euch klarer machen kann als das Buch.

Und zwar verstehe ich nicht warum man ein Interface überhaupt braucht?! In dem Buch ist folgendes Beispiel: Superklasse = Tier -> Unterklassen = Hund, Katze, Nilpfer, Löwe usw. Nun will man eine zweite Superklasse namens Haustier welche nur auf Hund und Katze vererbt. Diese muss man als interface einbinden und die Methoden abstract eintippen um sie dann in den Unterklassen in denen sie implements werden zu überschreiben. Warum der Streß? Dann könnte ich doch gleich die Methoden in den Unterklassen Hund und Katze programmieren, wozu das interface?!?

Hoffe auf Hilfe, danke im voraus.

mfg
pabu
 

partsch

Aktives Mitglied
Interfaces schreiben Klassen vor welche Methoden sie implementieren müssen

zB wenn man in der GUI-programmierung einem Button eine Funktion zuweisen will benötigt man einen
ActionListener und dessen Methode actionPerformed(ActionEvent e).
Solch ein ActionListener ist nunmal ein Interface da in die Methode actionPerformed ja bei jedem Programm etwas anderers hinein gehört
 
S

SlaterB

Gast
eine andere Klasse in deinem Programm könnte HaustierLaden sein,
ein Shop, der Haustiere aufnimmt, verwaltet, zu Weihnachten sogar füttern und wieder verkauft,

dazu muss er mit Haustieren arbeiten, deren spezifischen Methoden (die normale Tiere oder gar normale Objekte nicht haben) aufrufen,
etwa getVorbesitzer(), getHalsband(), getBevorzugteWohngegend(),
überhaupt müssen die Haustieren in einer Liste gespeichert werden,
z.B. in einer List<Haustier>

gäbe es das Interface nicht, müsste der Shop mit Tieren oder gar Objekten an sich arbeiten,
es könnten sich Nicht-Haustiere einschleichen, die Abfrage

Java:
List<Haustier> list = ..;
list.get(0).getHalsband();
wird zu
Java:
List<Tier> list = ..;
Tier t = list.get(0);
if (t instanceof Katze) {
  ((Katze) t).getHalsband();
} else if (t instanceof Hund) {
  ((Hund) t).getHalsband();
} else {
  // Exception: kenn ich nicht
}

führt man ein neues Haustier Vogel ein, muss dies nur das Interface korrekt implementieren und der Laden läuft, wie man so schön sagt,
ohne Interface müsste der HaustierLaden an 20 Stellen öde erweitert werden

auch schlimm: jemand könnte vergessen, in der Klasse Hunde die Methode getHalsband() zu implementieren,
mit Interfacen ist das vom Compiler vorgegeben,
innerhalb eines Programmes würde man das merken, wenn man die Methode aufruft,
bei unterschiedlichen Programmteilen/ Libraries wirds aber schwerer
 
Zuletzt bearbeitet von einem Moderator:

derweise

Aktives Mitglied
hallo. ich habe auch eine frage zu interfaces. ich habe folgende implmentierung:

Java:
public class AddressImpl implements Address {

	......

	public void loadFromFile(Object file) {

		this.street = readLine();
                print(street);      //das habe ich zum testen gemacht, habe auch schon "this.street" ausprobiert...
	}
}

ich möchte, dass das programm die straße von einer datei einliest. das einlesen erfolgt in einer anwendung, in der main methode in einer anderen klasse:

Java:
public static void main(String[] args) {
		String dateiname=("C:\\....");							
			Object file = openInputFile(dateiname);
			
			Address a = new AddressImpl();
			a.loadFromFile(file);
		
		closeInputFile(dateiname);
	}

doch leider liest er mir nichts ein?
 
Zuletzt bearbeitet:

pabu1983

Mitglied
Also sehe ich das richtig, dass "interface" zwei Dinge bietet:

1) Man wird vom Compiler darauf aufmerksam gemacht das man eine Methode vergessen hat zu implementieren.

2) Das in die einzelnen Methoden die von den Unterklassen überschrieben werden MÜSSEN jeweils unterschiedliche Dinge stehen können.

Stimmt das so?

Naja werde mal weiter das Buch durcharbeiten, vielleicht macht es ja mal früher oder später *klick*

Danke für eure Antworten...

mfg
pabu
 
S

SlaterB

Gast
@derweise
diese Frage hat (noch) nichts im Interfacen zu tun,
versuche doch erstmal ganz normal in einer main-Methode etwas einzulesen, das wird glaube ich schwer genug,
von FileReader & Co. schon gehört? dafür gibts in Lehrbüchern eigene Kapitel oder bei google suchen,

und wenn du jetzt nach Details zu FileReader fragst, dann bitte nicht in diesem Thread hier
oder macht 'openInputFile' das schon? -> aber auch in neuen Thema

@pabu1983
1. ja, aber kleiner Punkt
2. ob unterschiedlich oder nicht ist recht egal, wird aber wohl so sein, sonst wäre es ja dieselbe Klasse

wichtig ist immer noch, dass eine Klasse HaustierLaden ohne Interface praktisch nicht denkbar wäre..
(wobei 1 und 2 sicherlich auch ne gewisse Rolle mitspielen)
 
Zuletzt bearbeitet von einem Moderator:

nrg

Top Contributor
ich hätte noch eine Frage, weil es bei mir auch noch nicht ganz zum *klick* gekommen ist ;).

warum wird die Klasse Haustier dann nicht zu einer normalen abstrakten Superklasse? Was ist der unterschied zwischen einem Interface und einer abstrakten Klasse?

edit: hat das was mit der Einfachvererbung von Java zu tun?

Danke und Grüße
nrg
 
Zuletzt bearbeitet:
S

SlaterB

Gast
hat was mit der Einfachvererbung zu tun, wenns geht dann Klasse, ob abstrakt oder nicht, sonst geht nur noch Interface

@
derweise
openInputFile() liefert doch sicher kein Objekt sondern etwas höheren, an dem man was sinnvolles aufrufen kann,
das war aber nun unter Garantie der letzte inhaltliche Kommentar dazu hier ;)
 

derweise

Aktives Mitglied
ja, es musste einfach:

Java:
public class AddressImpl implements Address {
 
    ......
 
    public void loadFromFile(Object file) {
 
        this.street = readLine(file);
    }
}

file heißen
 
S

SlaterB

Gast
der Unterschied liegt doch auf der Hand, eine abstrakte Klasse kann mehr,
wenn sie will hat sie nur abstrakte Methoden, dann ist es quasi ein Interface,

ansonsten auch zusätzlich Implementierung, die vererbt wird,
das kann ein Interface nicht, dafür ist die Vererbung auf eine Klasse beschränkt,
während man beliebig viele Interface implementieren kann
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
J Eine Frage zur Schreibweise == ? : Java Basics - Anfänger-Themen 3
O Bedingter Operator eine Frage! Java Basics - Anfänger-Themen 10
S Noch eine Frage zur Rekursion... Java Basics - Anfänger-Themen 11
M Eine Frage zu Array Java Basics - Anfänger-Themen 6
J Eine Frage zu Serializable Java Basics - Anfänger-Themen 3
L Erneut eine Frage zu Rückgabewerten Java Basics - Anfänger-Themen 10
J Ergebnis wird gespammt sowie eine else if Frage Java Basics - Anfänger-Themen 2
V in diesem Forum wurde mir am meisten geholfen, daher eine Frage die hier nicht passt. sry (VB Frage) Java Basics - Anfänger-Themen 3
E Methoden Eine Frage zum beigelegten "Programm" Java Basics - Anfänger-Themen 2
T Eine kurze frage vor der prüfung bitte. Java Basics - Anfänger-Themen 5
N Java UML: Eine Frage zu public-Variablen Java Basics - Anfänger-Themen 19
DaniSahne96 Frage zu Java ist auch eine Insel Java Basics - Anfänger-Themen 12
F Eine Frage über paint() Funktion Java Basics - Anfänger-Themen 2
K Eine Frage zum Quicksort Java Basics - Anfänger-Themen 11
A Eine Frage zu AWt in JAVA, wie wähle ich ein Punkt aus`? Java Basics - Anfänger-Themen 4
D Wohl eine einfache Frage... Java Basics - Anfänger-Themen 2
U actionListener - eine Kleine Frage Java Basics - Anfänger-Themen 7
B Eine Frage des Designs Java Basics - Anfänger-Themen 6
L eine richtige anfänger-frage Java Basics - Anfänger-Themen 3
J Eine saudumme Frage Java Basics - Anfänger-Themen 5
T Eine doofe Frage zum null-Layout-Manager Java Basics - Anfänger-Themen 6
Screen Eine Frage zu moueMove in applets und deren Vergleich Java Basics - Anfänger-Themen 11
0 Eine Frage zur Vererbung... Java Basics - Anfänger-Themen 2
T Frage aus dem Buch JAVA ist auch eine Insel Java Basics - Anfänger-Themen 11
M Eine kleine Frage bzw kleine Theorie frage String[arg] Java Basics - Anfänger-Themen 6
G Frage:Welche Methodne kann man eine Zahl bzw. ein String Java Basics - Anfänger-Themen 3
P Eine kleine Frage. Java Basics - Anfänger-Themen 4
D Hab mal eine Frage. ganz leicht wahrscheinlich :D Java Basics - Anfänger-Themen 6
R eine frage wegen methoden und if statments Java Basics - Anfänger-Themen 6
B eine billige frage, für mich leider jedoch nicht Java Basics - Anfänger-Themen 16
R Noch eine Frage: Breite des Applets im Browser ermitteln Java Basics - Anfänger-Themen 7
R Habe ein Problem und eine Frage Java Basics - Anfänger-Themen 19
O eine frage/problem zu string.split() Java Basics - Anfänger-Themen 2
N Und noch eine Frage über getRuntime() Java Basics - Anfänger-Themen 4
S Nochmel eine Zugriffsfrage! FRAGE 2! Java Basics - Anfänger-Themen 3
T Newbie Frage Eine Java Anwendung fernsteuern? Java Basics - Anfänger-Themen 4
G eine Frage zur Generic Java ? Java Basics - Anfänger-Themen 8
D Eine GANZ dumme Frage Java Basics - Anfänger-Themen 22
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
M Vergleichen, ob eine Liste länger als andere ist Java Basics - Anfänger-Themen 6
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
Kingdako Wie löse ich eine Mathematische Formel mit Arrays und Schleifen? Java Basics - Anfänger-Themen 32
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
G Wie wartet man bis ein URL eine Antwort zurückgibt? Java Basics - Anfänger-Themen 5
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
M mit Maven eine ausführbare Jar bauen Java Basics - Anfänger-Themen 7
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
M Eine Funktion zuweisen Java Basics - Anfänger-Themen 3
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
L Methoden Eine Methode um zu testen ob es ein Nachbar gibt Java Basics - Anfänger-Themen 10
S Eine Idee umsetzen ganz schnell!? Java Basics - Anfänger-Themen 68
I Grundsatzfrage: Belegt eine Referenz auf 'null' RAM, und wenn ja - wieviel ;-) ? Java Basics - Anfänger-Themen 5
jeff98 Wie kann man in Java eine Zeichenformation ausgeben? Java Basics - Anfänger-Themen 9
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
Thomas06 Wie kann man mithilfe von boolean herausfinden ob eine zahl durch 5 und 7 teilbart ist ? Java Basics - Anfänger-Themen 7
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
A Eclipse IDE - Wie bekomme ich eine ältere Version Java Basics - Anfänger-Themen 6
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
berserkerdq2 Warum muss man manchmal in der RUnmethode sleep in eine schleife tun? Java Basics - Anfänger-Themen 9
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
berserkerdq2 Sende eine Nachricht an den Client und leere den Ausgabestorm, was ist damit genau gemeint? Java Basics - Anfänger-Themen 3
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
sserio Prüfen, ob eine Zahl eine periodische Zahl ist Java Basics - Anfänger-Themen 20
L Anpassung der Spaltenbreite auch auf eine zweite Tabelle anwenden Java Basics - Anfänger-Themen 8
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
JordenJost Java ist auch eine Insel für Anfänger Java Basics - Anfänger-Themen 2
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
berserkerdq2 Überprüfen ob eine Schreibberechtigung auf ein file exisitert bzw. ob man dieses file löschen kann, wie? Java Basics - Anfänger-Themen 9
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
X Hilfe beim Übertragen in eine For-Schleife Java Basics - Anfänger-Themen 1
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
U Warum gibt das eine Nullpointerexception? (Switch) Java Basics - Anfänger-Themen 6
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben