Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Erweiterte Zuweisungskompatibilität

Ähnliche Präsentationen


Präsentation zum Thema: "Erweiterte Zuweisungskompatibilität"—  Präsentation transkript:

1 Erweiterte Zuweisungskompatibilität

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

3 Beispiel:

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

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

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); Welche Anweisung ist korrekt, welche falsch? (Compiler meldet Fehler) h=ht; ht=h; } 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 public class MainZuweis { public static void main(String[] args){
Haustier myHaustier1 = new Haustier("Rrocco",11); Falsch ! Diese Anweisung ist falsch, weil die Klasse Haustier abstract ist und deshalb kein Objekt davon gebildet werden kann. Ist diese Anweisung korrekt?

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

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

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

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

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

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

17 public class MainZuweis { public static void main(String[] args){
Einem Objekt einer Unterklasse wird ein Objekt einer Oberklasse zugewiesen. Haustier myHaustier1 = new Haustier("Rrocco",11); Falsch ! Haustier myHaustier2; Hund myDog1=new Hund("Rrudi",13); myHaustier2 = new Haustier("Rex"); Falsch ! Falsch ! myDog1 = myHaustier2; myHaustier2 = myDog1; 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 myTiere = new Haustier[5];
Haustier[] myTiere; myTiere = new Haustier[5]; Es wird ein Objekt angelegt, das aus lauter Zeigern besteht, wobei myTiere auf dieses Feld zeigt.

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

21 myTiere = new Haustier[5]; myTiere[2]=new Haustier("Bello");
Falsch ! myTiere[2]=new Hund("Rrolf", 17); } 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)


Herunterladen ppt "Erweiterte Zuweisungskompatibilität"

Ähnliche Präsentationen


Google-Anzeigen