Vererbung Verständnisproblem bei Übung

Alina_C

Mitglied
Bin in einem Buch auf folgendes Programm gestoßen:
Java:
package kapitel8;

public class Von76 extends Clowns{
	public static void main (String[] args){
		Nasen[] i = new Nasen[3];
		i[0] = new Akte();
		i[1] = new Clowns();
		i[2] = new Von76();
		for (int x = 0; x < 3; x++){
			System.out.println(i[x].iMethode()+" "+i[x].getClass());
		}
	}
}

Java:
package kapitel8;

interface Nasen {
	public int iMethode();
}

Java:
package kapitel8;

abstract class Picasso implements Nasen{
	public int iMethode(){
		return 7;
	}
}

Java:
package kapitel8;

class Akte extends Picasso{
	public int iMethode(){
		return 5;
	}
}

Java:
package kapitel8;

public class Clowns extends Picasso{

}

Als Ausgabe erhlät man:
5 class kapitel8.Akte
7 class kapitel8.Clowns
7 class kapitel8.Von76


Das ganze verwirrt mich total.
Wenn ich das richtig verstehe wird zunächst ein Nasen-Array der Länge 3 erstellt.
Nasen ist aber ein Interface. Wie kann man dann ein Array davon erstellen? Also Objekte gehen nicht - Arrays jedoch schon?
Im Interface steht ein Methodenaufruf. Der hat jedoch keine Bedeutung, richtig?

Nun füllt man das Array mit Objektreferenzen der verschiedensten Klassen und ruft mittels for-Schleife jeweils die
Code:
iMethode()
und die Methode
Code:
getClass()
auf und gibt diese auf dem Bildschirm aus.

Die Klasse Akte erbt von Picasso und überdeckt(?) die
Code:
iMethode()
der Super(?)/Oberklasse, darum wird auch 5 ausgegeben anstelle von 7.

Die Klasse Clowns erbt von Picasso. Eben auch die iMethode() mit der
Code:
return 7
und daher kann man auf Clowns die Methode aufrufen. Picasso selbst ist abstrakt, also gibt es davon keine Instanzen.
Sie implementiert das Interface Nasen (interfaces verlangen nach implements, nicht nach extends?).
Interfaces sind nur dazu da um das Deadly Diamond of Death der abstrakten Klassen zu verhindern?
 

timbeau

Gesperrter Benutzer
Also Interface [] ifaceArray = new iface[X] erzeugt noch kein einziges Objekt außer dem Array; Damit gilt die Interface Regel.

ifaceArray[0] = new ... und hier steht kein Interface mehr. Damit wird ebenfalls kein Interface Objekt erstellt.

Den Rest hast du soweit erkannt.
 

M_Schaffrath

Aktives Mitglied
Das ganze verwirrt mich total.
Wenn ich das richtig verstehe wird zunächst ein Nasen-Array der Länge 3 erstellt.
Nasen ist aber ein Interface. Wie kann man dann ein Array davon erstellen? Also Objekte gehen nicht - Arrays jedoch schon?

Ein Interface ist ein Typ, das heißt, dass man Variablen dieses Typs verwenden kann. Man kann zwar nicht direkt Objekte dieses Typs erschaffen, aber wenn eine Klasse das Interface umsetzt, sind alle Objekte dieser Klasse vom Typ des Interface.
Ein Objekt-Array ist ja nur eine Liste von Referenzen eines bestimmten Typs, nicht unbedingt ein Block von konkreten Objekten. Dieses bestimmte Array kann eben Referenzen vom Typ "Nasen" aufnehmen.

Im Interface steht ein Methodenaufruf. Der hat jedoch keine Bedeutung, richtig?

Es ist kein Aufruf, sondern eine Deklaration des Methodenkopfes. Das hat den Sinn, dass jede Klasse, die das Interface umsetzt, diese Methode mit festgelegtem Namen, Parametern und Rückgabetypen umsetzen muss. Der folgende Code funktioniert, weil das Inteface garantiert, dass die Methode genauso aufgerufen werden kann, auch wenn wir die Implementierung nicht kennen.
Java:
Nasen x = new IrgendwasWasNasenImplementiert();
x.iMethode();

Die Klasse Akte erbt von Picasso und überdeckt(?) die
Code:
iMethode()
der Super(?)/Oberklasse, darum wird auch 5 ausgegeben anstelle von 7.

Die Klasse Clowns erbt von Picasso. Eben auch die iMethode() mit der
Code:
return 7
und daher kann man auf Clowns die Methode aufrufen. Picasso selbst ist abstrakt, also gibt es davon keine Instanzen.
Sie implementiert das Interface Nasen (interfaces verlangen nach implements, nicht nach extends?).

Ja, das kommt so hin.

Interfaces sind nur dazu da um das Deadly Diamond of Death der abstrakten Klassen zu verhindern?

Im Prinzip ist das der Hauptunterschied zu den abstrakten Klassen und Methoden.
 

xehpuk

Top Contributor
Im Interface steht ein Methodenaufruf. Der hat jedoch keine Bedeutung, richtig?
Entfern ihn und staune über den Compiler-Fehler. :bae:
Interfaces sind nur dazu da um das Deadly Diamond of Death der abstrakten Klassen zu verhindern?
Nein, wer hat das denn behauptet? Dass dies ein Problem bei Mehrfachvererbung ist, stimmt aber.
Während Interfaces – wie der Name schon sagt – eine Programmierschnittstelle bieten, enthalten abstrakte Klassen (wenn man sie richtig einsetzt) bereits mindestens eine Implementation, damit sich Subklassen diese "teilen" können.

Interfaces (The Java™ Tutorials > Learning the Java Language > Interfaces and Inheritance)
Abstract Methods and Classes (The Java™ Tutorials > Learning the Java Language > Interfaces and Inheritance)
 

Alina_C

Mitglied
Entfern ihn und staune über den Compiler-Fehler. :bae:

Nein, wer hat das denn behauptet? Dass dies ein Problem bei Mehrfachvererbung ist, stimmt aber.
Während Interfaces – wie der Name schon sagt – eine Programmierschnittstelle bieten, enthalten abstrakte Klassen (wenn man sie richtig einsetzt) bereits mindestens eine Implementation, damit sich Subklassen diese "teilen" können.

Interfaces (The Java™ Tutorials > Learning the Java Language > Interfaces and Inheritance)
Abstract Methods and Classes (The Java™ Tutorials > Learning the Java Language > Interfaces and Inheritance)

Okay, wenn ich das weglasse, kommt der Fehler bei
Code:
public class Clowns extends Picasso{

}
The Type Clowns must implement the inherited abstract Method Nasen.iMethode() und, wenn ich das richtig verstehe, rührt das daher, dass 'Clowns' 'Picasso' erweitert.
In 'Picasso' steht nun implements 'Nasen' und da ich mich nun nochmal schlau gemacht habe:oops: - muss jede Methode in einem Interface umgesetzt werden.

Übrigens hätte das Thema natürlich ins Anhänferforum gehört. Habe mich da leider vertan.
 
Zuletzt bearbeitet:
S

SlaterB

Gast
verschoben

zum Rest ist nicht viel zu sagen außer dass manches komisch klingt

> Im Interface steht ein Methodenaufruf.
eher eine Methodendeklaration?

> In 'Picasso' steht nun implements 'Nasen'
stand da doch schon immer, jedenfalls im ersten Posting:
> abstract class Picasso implements Nasen{

> Okay, wenn ich das weglasse, kommt der Fehler bei public class Clowns extends Picasso{ }
was wurde hier wohl weggelassen, der Fehlermeldung nach kaum die genannte Methode aus dem Interface,
so verstehe ich das jedenfalls, vielleicht falsch interpretiert, vielleicht von dir anders verstanden als von xehpuk usw.,
alles recht merkwürdig in den letzten Postings,
deutlicher wäre doch genaue Nennung was weggelassen wird oder welcher exakte neue Code zu welcher Fehlermeldung gehört,
aber ja auch egal ;)

ich setze jetzt auch auf 'Erledigt', falls auch das falsch interpretiert, nochmal melden
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Verständnisproblem bei Server/Client Java Basics - Anfänger-Themen 3
nonickatall Grundsätzliches Verständnisproblem des Aufbaus eines Programms Java Basics - Anfänger-Themen 19
X Verständnisproblem Call-By-Reference Java Basics - Anfänger-Themen 5
P JavaFX: Verständnisproblem bei ComboBox/ChoiceBox etc. Java Basics - Anfänger-Themen 9
T Verständnisproblem mit Assoziationen Java Basics - Anfänger-Themen 7
M Verständnisproblem der Rekursion bei Arrays Java Basics - Anfänger-Themen 8
A Erste Schritte Verständnisproblem Java Basics - Anfänger-Themen 5
S Verständnisproblem Aufgabe Java Basics - Anfänger-Themen 9
S Model View Controller: Verständnisproblem Java Basics - Anfänger-Themen 13
temi Verständnisproblem Class.forName() Java Basics - Anfänger-Themen 3
2 Verständnisproblem bei Anwendung von Lower Bounded Wildcards Java Basics - Anfänger-Themen 5
V Verständnisproblem Java Basics - Anfänger-Themen 22
L [Verständnisproblem] Array wird trotz void rückgabe verändert. Java Basics - Anfänger-Themen 5
A Verständnisproblem Ausgabe Do-While-Schleife Java Basics - Anfänger-Themen 3
J Verständnisproblem einer Methode Java Basics - Anfänger-Themen 20
M Konstruktur - Verständnisproblem Java Basics - Anfänger-Themen 4
C Postinkrement und println - Verständnisproblem Java Basics - Anfänger-Themen 8
T Verständnisproblem beim Vigenere-Verfahren Java Basics - Anfänger-Themen 2
Q MVC Verständnisproblem: Controller vs model.modelChanged() Java Basics - Anfänger-Themen 0
N Verständnisproblem InsertionSort. Java Basics - Anfänger-Themen 2
D Verständnisproblem Java Basics - Anfänger-Themen 2
B VerständnisProblem mit Beispielaufgabe aus Buch Java Basics - Anfänger-Themen 1
H Polymorphie Verständnisproblem Vererbung/Polymorphie Java Basics - Anfänger-Themen 4
FrankR2 Grundsätzliches Verständnisproblem: Java 32/64-bit; Windows 7/8, 32/64-bit-System Java Basics - Anfänger-Themen 5
S Verständnisproblem bei Interfaces Java Basics - Anfänger-Themen 6
V Verständnisproblem Java Basics - Anfänger-Themen 5
V Arrays-verständnisproblem Java Basics - Anfänger-Themen 4
M Collections HashSet verständnisproblem Java Basics - Anfänger-Themen 9
S Verständnisproblem einer Übungsaufgabe Java Basics - Anfänger-Themen 6
H Abstrakte Basisklasse Verständnisproblem! Java Basics - Anfänger-Themen 8
G Verständnisproblem mit swing Java Basics - Anfänger-Themen 6
F Methoden Cannot refer to a non-final variable.. verständnisproblem. Java Basics - Anfänger-Themen 7
P Verständnisproblem main Methode Java Basics - Anfänger-Themen 9
S Klassen Verständnisproblem Konstruktor Java Basics - Anfänger-Themen 7
I e.getMessage(); - Verständnisproblem Java Basics - Anfänger-Themen 6
lesni Vererbung Vererbung - Verständnisproblem Java Basics - Anfänger-Themen 2
M OOP Polymorphie/Vererbung Verständnisproblem Java Basics - Anfänger-Themen 2
J Verständnisproblem Methoden-Kettung Java Basics - Anfänger-Themen 3
E Verständnisproblem Typkonvertierung Java Basics - Anfänger-Themen 4
S OOP Verständnisproblem Umsteiger Java Basics - Anfänger-Themen 22
C Array Verständnisproblem Java Basics - Anfänger-Themen 3
P White-Box-Test Verständnisproblem Java Basics - Anfänger-Themen 11
D : ? Operator -Verständnisproblem Java Basics - Anfänger-Themen 24
G Verständnisproblem: Exceptions Java Basics - Anfänger-Themen 17
L Eclipse verlangt "{" nach ";"... Verständnisproblem Java Basics - Anfänger-Themen 5
D charAt(i) verständnisproblem Java Basics - Anfänger-Themen 4
D Verständnisproblem Marken und Schleifen Java Basics - Anfänger-Themen 19
M Verständnisproblem bei Ternären Operanten bzw. Bedingungsoperator Java Basics - Anfänger-Themen 8
T Datentypen Verständnisproblem mit main Methode Java Basics - Anfänger-Themen 3
M Verständnisproblem Threads Java Basics - Anfänger-Themen 7
X Threads und synchronized - Verständnisproblem Java Basics - Anfänger-Themen 3
W ArrayLists: Verständnisproblem bei remove() Java Basics - Anfänger-Themen 2
B Verständnisproblem zu Swing und Methoden Java Basics - Anfänger-Themen 8
A Postinkrement-Verständnisproblem Java Basics - Anfänger-Themen 12
R Iterator Liste, Verständnisproblem Java Basics - Anfänger-Themen 4
1 Verständnisproblem mit Foreach Java Basics - Anfänger-Themen 4
B Verständnisproblem bei Vererbung Java Basics - Anfänger-Themen 3
W generisches Programmieren - Verständnisproblem Java Basics - Anfänger-Themen 4
A Verständnisproblem Nr 2 Java Basics - Anfänger-Themen 14
A Verständnisproblem Java Basics - Anfänger-Themen 6
A Array Verständnisproblem Java Basics - Anfänger-Themen 8
G Verständnisproblem --> JTree Java Basics - Anfänger-Themen 6
M Verständnisproblem mit der Klasse Thread Java Basics - Anfänger-Themen 10
N BufferedReader Verständnisproblem Java Basics - Anfänger-Themen 12
G Verständnisproblem: Code kompelieren und interpretieren Java Basics - Anfänger-Themen 3
S Polymorphie Verständnisproblem Java Basics - Anfänger-Themen 4
G Verständnisproblem Türme von Hanoi Java Basics - Anfänger-Themen 4
G Verständnisproblem Serverinput einlesen. Java Basics - Anfänger-Themen 4
J Array und Schleifen Verständnisproblem Java Basics - Anfänger-Themen 25
G Verständnisproblem Java Basics - Anfänger-Themen 4
N Verständnisproblem: Mehrere Objekte einer Klasse erstellen Java Basics - Anfänger-Themen 2
S SelectionListener + repaint().Verständnisproblem ;) Java Basics - Anfänger-Themen 7
V Verständnisproblem mit Abstrakten zu Konkreten Klassen Java Basics - Anfänger-Themen 7
A Problem mit der Stringgrösse, bzw Verständnisproblem? Java Basics - Anfänger-Themen 14
A Verständnisproblem mit ScrollPanel Java Basics - Anfänger-Themen 3
R Verständnisproblem mit Hibernate Java Basics - Anfänger-Themen 2
T Verständnisproblem mit equals() Java Basics - Anfänger-Themen 4
N datei byte für byte auslesen (verständnisproblem) Java Basics - Anfänger-Themen 2
T Verständnisproblem packages/import Java Basics - Anfänger-Themen 9
Chucky Lineare Listen Programm Verständnisproblem Java Basics - Anfänger-Themen 38
D Verständnisproblem Java Basics - Anfänger-Themen 6
S for Schleifen: Verständnisproblem Java Basics - Anfänger-Themen 15
T Vererbung von Attributen und Methoden, Verständnisproblem Java Basics - Anfänger-Themen 4
bernd while-Schleife: Verständnisproblem Java Basics - Anfänger-Themen 7
S verständnisproblem drucken Java Basics - Anfänger-Themen 11
G GridBagLayout: Verständnisproblem Java Basics - Anfänger-Themen 5
J Übung Zahlworte Java Basics - Anfänger-Themen 14
M Array - Übung Java Basics - Anfänger-Themen 3
Der Grütz Verständnisfrage zu Übung aus Java Kurs - Schaltjahr bestimmen Java Basics - Anfänger-Themen 2
A Vererbung Vererbung Übung Java Basics - Anfänger-Themen 5
Kawastori Hilfe bei Methoden Übung Java Basics - Anfänger-Themen 6
T OOP Klausur-Übung Öpnv Java Basics - Anfänger-Themen 17
A Übung Else if Java Basics - Anfänger-Themen 2
M Code nur für Cracks? Crack the Passwort Übung Java Basics - Anfänger-Themen 7
parrot Array Übung Java Basics - Anfänger-Themen 25
T Programmierwettbewerb Übung Java Basics - Anfänger-Themen 73
G "Ladebalken" erstellen - Übung Java Basics - Anfänger-Themen 3
M JavaFX-Übung Autospiel Java Basics - Anfänger-Themen 4
B ShuttleBus - Übung Java Basics - Anfänger-Themen 3
Zrebna Compiler-Fehler Java-Compiler wird nach 'javac' keyword-Eingabe nicht gestartet (Erste Übung) Java Basics - Anfänger-Themen 18

Ähnliche Java Themen

Neue Themen


Oben