21
Erweiterte Zuweisungskompatib ilität

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

Embed Size (px)

Citation preview

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

Erweiterte Zuweisungskompatibilität

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

Wie kann man Objekte verschiedener Klassen einer Klassenhierarchie einander zuweisen ?

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

Beispiel:

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

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.

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

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.

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

Beispiel:

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

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.

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

Weitere Beispiele:

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

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; }}

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

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?

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

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?

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

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?

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

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 !

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

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 !

Falsch !

Ist diese Anweisung korrekt?

Falsch !

Hund myDog1=new Hund("Rrudi",13); myHaustier2 = new Haustier("Rex");

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

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 !

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

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?

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

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.

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

Haustier[] myTiere;

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

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

Haustier[] myTiere;

Es wird ein Objekt angelegt, das aus lauter Zeigern besteht, wobei myTiere auf dieses Feld zeigt.

myTiere = new Haustier[5];

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

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 !

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

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 !