View
111
Download
2
Category
Preview:
Citation preview
Erweiterte Zuweisungskompatibilität
Wie kann man Objekte verschiedener Klassen einer Klassenhierarchie einander zuweisen ?
Beispiel:
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.
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.
Beispiel:
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.
Weitere Beispiele:
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; }}
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?
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?
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?
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 !
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");
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 !
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?
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.
Haustier[] myTiere;
Es wird der Zeiger myTiere mit Typ Haustier angelegt. Dieser soll später auf ein Feld von Zeigern zeigen.
Haustier[] myTiere;
Es wird ein Objekt angelegt, das aus lauter Zeigern besteht, wobei myTiere auf dieses Feld zeigt.
myTiere = new Haustier[5];
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 !
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 !
Recommended