Klausuraufgabe: Wie versteht ihr das?

Yorkfield

Lt. Commander
Registriert
Nov. 2007
Beiträge
1.338
Hallo,

ich arbeitet gerade alte Informatikklausuren durch und bin gerade auf eine Aussage gestoßen die ich entweder mit wahr oder mit falsch beantworten muss.

Nur bei Mehrfachvererbung darf eine Klasse mehrere Oberklassen besitzen.

Wahr oder Falsch. Es geht um OOP. Ein Kollege meint, dass das falsch ist. Weil eine Klasse ja auch indirekte Oberklassen haben kann. Also KlasseA, KlasseB extends KlasseA, KlasseC extends KlasseB, usw.

Ich bin eher der Meinung, dass das richtig ist. Weil ich Oberklasse mit "direkter" Oberklasse assoziiere. Und das geht nun mal nur mit Mehrfachvererbung. Die Aufgabe gibt nen halben Punkt ;)
 
ich würde auch falsch sagen ^^ außer natürlich wenn man so argumentiert wie du ;)
 
Die Oberklasse von einer Oberklasse ist für die abgeleitete Klasse (Subklasse) immer noch eine Oberklasse (die Subklasse erbt ja auch deren Eigenschaften).

Die Aussage ist bezogen auf den Begriff Oberklasse im Sinne von "direkter Oberklasse" oder "nächster Oberklasse" richtig (sogar trivial). Ich denke jedoch, dass es bei dieser Fragestellung um den Begriff "Oberklasse" im Allgemeinen geht (siehe oben).

Von daher: falsch
 
Direkte Oberklasse - richtig, indirekte - falsch.

Allerdings sind meistens direkte Klassen gemeint, so hast du @Flash nur eine Oberklasse, @c++ mehrere. In meiner mündlichen Vordiplomprüfung war das eine kleine Fangfrage... Habe beide Standpunkte erläutert...
 
Yorkfield schrieb:
Wahr oder Falsch. Es geht um OOP. Ein Kollege meint, dass das falsch ist. Weil eine Klasse ja auch indirekte Oberklassen haben kann. Also KlasseA, KlasseB extends KlasseA, KlasseC extends KlasseB, usw.
teils richtig, in c++ ist mehrfachvererbung überhaupt kein problem.
Code:
class Unterklasse : public OberklasseA, OberklasseB, OberklasseC
{
  // ...
};
in java, c#, php und weiteren sprachen wird es dabei aber kritisch, da dort nur jeweils von einer oberklasse geerbt und per interface erweitert werden kann (wobei mir die bedeutung von interfaces nach vielen jahren von programmieren immer noch nicht ganz klar ist, sowie der "vorteil" dessen genauso wenig).
Code:
class Unterklasse extends OberklasseA implements OberklassenInterfaceB, OberklassenInterfaceC
{
  // ...
}
 
claW. schrieb:
wobei mir die bedeutung von interfaces nach vielen jahren von programmieren immer noch nicht ganz klar ist

Ein Interface definiert eine abstrakte Klasse, kann somit also NICHT INSTANTIIERT werden. Interfaces definieren Eigenschaften und Methoden, die eine von ihnen abgeleitet Subklasse besitzen und implementieren muss.

Interfaces implementieren nicht (daher: abstrakt), sondern definieren und deklarieren nur.
 
jaja das weiß ich schon, aber ich selbst bastel immer nur klassen. interfaces haben bei methoden doch aber nur die deklaration oder? deshalb erschließt sich mir der sinn dessen nicht, wieso ich nur deklarationen in eine klasse aufnehmen kann?! definiert werden können sie im interface ja nicht, denn das geschieht ja in der klasse.
 
Interfaces sind quasi Klassen ohne Implementierung (deshalb können sie auch nicht instantiiert werden). Sie geben vor, wie die abgeleiteten Klassen später "aussehen".

Vielleicht verdeutlicht ein konkretes Java-Beispiel Interfaces:

Code:
public interface Obst {
   public String WasBinIch();
}

public class Erdbeere implements Obst {
   public String WasBinIch() { return "Erdbeere"; }
}

public class Banane implements Obst {
   public String WasBinIch() { return "eine Banane"; }
}

public class Kiwi implements Obst {
   public String WasBinIch() { return "eine Kiwi"; }
}

Du kannst zwar kein Objekt vom Interface Obst instantiieren. D.h.
Code:
Obst o = new Obst();
würde nicht funktionieren.

Du könntest jedoch folgendes tun:
Code:
Obst o = NULL;

if (operation == "machErdbeere")
  o = new Erdbeere();
else if (operation == "machBanane")
  o = new Banane;

System.out.println("Ich bin "+o.WasBinIch());

oder:

Code:
public void WelchesObst(Obst o) {
  System.out.println("Ich bin "+o.WasBinIch());
}


Interfaces sind also die Java-Variante der abstrakten Klasse: http://de.wikipedia.org/wiki/Abstrakte_Klasse
 
Möchte hier mal ergänzen, dass die Erdbeere kein Obst ist, sondern eine Sammelnussfrucht. ;)
Also weder Obst noch Gemüse. Die eigentlichen "Nüsse" sind die kleinen Samen, die in die Oberfläche impregniert sind. Das nur mal so nebenbei. :P ^^
 
Cyba_Mephisto schrieb:
Möchte hier mal ergänzen, dass die Erdbeere kein Obst ist, sondern eine Sammelnussfrucht. ;)
Also weder Obst noch Gemüse. Die eigentlichen "Nüsse" sind die kleinen Samen, die in die Oberfläche impregniert sind. Das nur mal so nebenbei. :P ^^

Ich bitte meine Inkompetenz im Fach Biologie zu entschuldigen :D
 
Zurück
Oben