Kovarianz

sousou

Bekanntes Mitglied
Hallo zusammen,


ich erkendige mich gerade was genau Kovariant in Java ist.

In Wikipedia erklärt:
Kovarianz und Kontravarianz ? Wikipedia


Kovarianz
Die Methoden der Unterklasse müssen ebenfalls Werte zurückliefern, die mit der Oberklasse vereinbar sind, also nie allgemeineren Typs sind, als der Rückgabetyp der Oberklasse (Kovarianz).

Typhierarchie des Rückgabewertes der Methode ist mit der Vererbungshierarchie von ClassA und ClassB


Ich versteh nicht was genau mit allgemeineren Typs gemeint ist.

Ist also Kovarianz wenn ich beispielsweise in der Klasse A:


class A{

methode ( int punkt, int Farbe){ }

}

class A extends B {

methode ( int punkt, Farbe ){ }
}


Nennt man das Kovarianz? ist das nicht einfach ne methode zu überschreiben.


LG
 

Atze

Top Contributor
allgemeinerer typ heißt, das es eine oberklasse des objekts ist

wenn eine methode ein total allgemeines object erwartet "compute(Object o)", kannst du ihr auch eine unterklasse übergeben, bsz einen String: "irgendwas.compute("ich bin ein string!")".

andersrum:

nicht allgemeiner heißt in dem fall, dass du keine oberklasse übergeben kannst

wenn eine methode einen string erwartet "compute(String s)", kannst du ihr keine oberklasse übergeben, bsz ein Object: "irgendwas.compute(new Object())" <- geht nicht
 

Landei

Top Contributor
Kovariante Rückgabewerte (ab Java 1.5):
Java:
class A {
   public A copy() { return this; }
}

class B extends A {
   public B copy() { return this; } //kovarianter Rückgabewert
}

...
B b1 = new B();
B b2 = b1.copy(); //funktioniert

A a1 = new B(); 
A a2 = a1.copy(); //funktioniert auch, 
//obwohl in Wahrheit ein B drinsteckt 
//und auch ein B zurückgeliefert wird
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben