Hallo zusammen,
bisher dachte ich:
Das widerspricht meinem aktuellen Verständnis von Generics. Kann mir bitte jemand helfen, meinen Knoten im Kopf zu lösen.
Vielen Dank für eure Unterstützung.
[CODE lang="java" title="Beispielcode" highlight="10, 11, 12, 13, 14, 15"]import java.util.*;
public class Main
{
public static void main(String[] args) {
List<Animal> Tiere = new ArrayList<>();
Tiere.add(new Cat());
Tiere.add(new Dog());
Tiere.add(new Animal());
System.out.println(Tiere.get(0).getClass()); //Output: class Cat
System.out.println(Tiere.get(1).getClass()); //Output: class Dog
System.out.println(Tiere.get(2).getClass()); //Output: class Animal
Tiere.get(0).sound(); //Output: Miau
Tiere.get(1).sound(); //Output: Wuff
Tiere.get(2).sound(); //Output: GrrrrMiauWuffPiep
}
}
class Animal{
public void sound(){
System.out.println("GrrrrMiauWuffPiep");
}
}
class Cat extends Animal{
@Override
public void sound(){
System.out.println("Miau");
}
}
class Dog extends Animal{
@Override
public void sound(){
System.out.println("Wuff");
}
}[/CODE]
bisher dachte ich:
- dass einer typisierten Liste nur Objekte des angegeben Typs hinzugefügt werden können
- dass ich abgeleitete Objekte upcasten muss, um sie der auf die Superklasse typisierten Liste hinzufügen zu können
- beim Abruf aus der Liste nur Objekte des angegebenen Listentyps zurückgegeben werden (abgeleitete Objekte werden als Superklassentyp ausgegeben)
Das widerspricht meinem aktuellen Verständnis von Generics. Kann mir bitte jemand helfen, meinen Knoten im Kopf zu lösen.
Vielen Dank für eure Unterstützung.
[CODE lang="java" title="Beispielcode" highlight="10, 11, 12, 13, 14, 15"]import java.util.*;
public class Main
{
public static void main(String[] args) {
List<Animal> Tiere = new ArrayList<>();
Tiere.add(new Cat());
Tiere.add(new Dog());
Tiere.add(new Animal());
System.out.println(Tiere.get(0).getClass()); //Output: class Cat
System.out.println(Tiere.get(1).getClass()); //Output: class Dog
System.out.println(Tiere.get(2).getClass()); //Output: class Animal
Tiere.get(0).sound(); //Output: Miau
Tiere.get(1).sound(); //Output: Wuff
Tiere.get(2).sound(); //Output: GrrrrMiauWuffPiep
}
}
class Animal{
public void sound(){
System.out.println("GrrrrMiauWuffPiep");
}
}
class Cat extends Animal{
@Override
public void sound(){
System.out.println("Miau");
}
}
class Dog extends Animal{
@Override
public void sound(){
System.out.println("Wuff");
}
}[/CODE]