Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Erweiterte Zuweisungskompatibilität. Wie kann man Objekte verschiedener Klassen einer Klassenhierarchie einander zuweisen ?

Ähnliche Präsentationen


Präsentation zum Thema: "Erweiterte Zuweisungskompatibilität. Wie kann man Objekte verschiedener Klassen einer Klassenhierarchie einander zuweisen ?"—  Präsentation transkript:

1 Erweiterte Zuweisungskompatibilität

2 Wie kann man Objekte verschiedener Klassen einer Klassenhierarchie einander zuweisen ?

3 Beispiel:

4 Haustier - name: String + Haustier(String pName) Hund ist Subklasse (Unterklasse) von Haustier Haustier ist die Basisklasse (Oberklasse) Hund - gewicht: int + Hund(String pName, int pGewicht) Hund und Haustier können noch weitere Methoden und Attribute haben. Diese werden aus Gründen der Vereinfachung weggelassen.

5 Kurze Merkregel: richtig: "Oberklasse = Unterklasse" ("Obertyp = Untertyp") falsch: "Unterklasse = Oberklasse " (" Untertyp = Obertyp ") Es gilt folgende Regel: Einem Objekt einer Oberklasse darf ein Objekt einer Unterklasse zugewiesen werden, aber nicht umgekehrt.

6 Beispiel:

7 public class MainTest1{ public static void main(String[] args){ Haustier ht; Hund h; ht=new Haustier("doma"); h=new Hund("Rrrrex", 20); h=ht; ht=h; } Welche Anweisung ist korrekt, welche falsch? (Compiler meldet Fehler) Diese Anweisung ist falsch. Diese Anweisung ist korrekt.

8 Weitere Beispiele:

9 class Hund extends Haustier{ private int gewicht; public Hund(String pName, int pGewicht){ super(pName); gewicht = pGewicht; } abstract class Haustier{ private String name; public Haustier( String pName){ name = pName; }

10 Haustier myHaustier1 = new Haustier("Rrocco",11); public class MainZuweis { public static void main(String[] args){ Diese Anweisung ist falsch, weil die Klasse Haustier abstract ist und deshalb kein Objekt davon gebildet werden kann. Falsch ! Ist diese Anweisung korrekt?

11 Haustier myHaustier1 = new Haustier("Rrocco",11); public class MainZuweis { public static void main(String[] args){ Es wird ein Zeiger mit Typ Haustier angelegt, aber kein Objekt der Klasse Haustier. Haustier myHaustier2; Falsch ! Ist diese Anweisung korrekt?

12 Haustier myHaustier1 = new Haustier("Rrocco",11); public class MainZuweis { public static void main(String[] args){ Es wird ein Objekt des Typs Hund angelegt, auf das der Zeiger myDog1 zeigt. Haustier myHaustier2; Hund myDog1=new Hund("Rrudi",13); Falsch ! Ist diese Anweisung korrekt?

13 Haustier myHaustier1 = new Haustier("Rrocco",11); public class MainZuweis { public static void main(String[] args){ Diese Anweisung ist falsch, weil von einer abstrakten Klasse kein Objekt erzeugt werden kann. Haustier myHaustier2; myHaustier2 = new Haustier("Rex"); Falsch ! Ist diese Anweisung korrekt? Hund myDog1=new Hund("Rrudi",13); Falsch !

14 Haustier myHaustier1 = new Haustier("Rrocco",11); public class MainZuweis { public static void main(String[] args){ Diese Anweisung ist falsch, weil einem Objekt einer Unterklasse kein Objekt einer Oberklasse zugewiesen werden kann. Haustier myHaustier2; myDog1 = myHaustier2; Falsch ! Ist diese Anweisung korrekt? Falsch ! Hund myDog1=new Hund("Rrudi",13); myHaustier2 = new Haustier("Rex");

15 Haustier myHaustier1 = new Haustier("Rrocco",11); public class MainZuweis { public static void main(String[] args){ Einem Objekt einer Unterklasse wird ein Objekt einer Oberklasse zugewiesen. Haustier myHaustier2; myHaustier2 = myDog1; Falsch ! Hund myDog1=new Hund("Rrudi",13); Falsch ! myHaustier2 = new Haustier("Rex"); myDog1 = myHaustier2; Falsch !

16 Haustier myHaustier1 = new Haustier("Rrocco",11); public class MainZuweis { public static void main(String[] args){ Einem Objekt einer Unterklasse wird ein Objekt einer Oberklasse zugewiesen. Haustier myHaustier2; myHaustier2 = myDog1; Falsch ! Hund myDog1=new Hund("Rrudi",13); Falsch ! myHaustier2 = new Haustier("Rex"); myDog1 = myHaustier2; Falsch ! Ist diese Anweisung korrekt?

17 Haustier myHaustier1 = new Haustier("Rrocco",11); public class MainZuweis { public static void main(String[] args){ Einem Objekt einer Unterklasse wird ein Objekt einer Oberklasse zugewiesen. Haustier myHaustier2; myHaustier2 = myDog1; Falsch ! Hund myDog1=new Hund("Rrudi",13); Falsch ! myHaustier2 = new Haustier("Rex"); myDog1 = myHaustier2; Falsch ! Ja, weil einem Objekt einer Oberklasse ein Objekt einer Unterklasse zugewiesen wird.

18 Haustier[] myTiere; Es wird der Zeiger myTiere mit Typ Haustier angelegt. Dieser soll später auf ein Feld von Zeigern zeigen.

19 Haustier[] myTiere; Es wird ein Objekt angelegt, das aus lauter Zeigern besteht, wobei myTiere auf dieses Feld zeigt. myTiere = new Haustier[5];

20 Haustier[] myTiere; Diese Anweisung ist falsch, weil die Klasse Haustier abstract ist und deshalb kein Objekt davon gebildet werden kann. myTiere = new Haustier[5]; myTiere[2]=new Haustier("Bello"); Falsch !

21 Haustier[] myTiere; Es wird ein Objekt der Klasse Hund erstellt, das auf den Zeiger myTiere[2] zeigt. Dieser Zeiger ist vom Typ Haustier. Also Zuweisung: "Oberklasse = Unterklasse" (d.h. korrekt) myTiere = new Haustier[5]; myTiere[2]=new Haustier("Bello"); myTiere[2]=new Hund("Rrolf", 17); } Falsch !


Herunterladen ppt "Erweiterte Zuweisungskompatibilität. Wie kann man Objekte verschiedener Klassen einer Klassenhierarchie einander zuweisen ?"

Ähnliche Präsentationen


Google-Anzeigen