Erweiterte Zuweisungskompatibilität

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Objektorientierte Programmierung
der Universität Oldenburg
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Konzepte objektorientierter Systeme
Einführung in die Programmierung Zusammenfassung
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
Vererbung.
Abstrakte Klassen.
Ein Beispiel in Java.
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
Assoziationen (Beziehungen) 1 : n. Zu einem Auto gibt es mehrere Fahrer (2) und zu diesen 2 Fahrern gibt es genau dieses Auto.
Polymorphie (Vielgestaltigkeit)
Assoziationen (Beziehungen). Zwischen Objekten kann es eine Beziehung geben.
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Interface bzw. Schnittstelle anschaulich: Hüllenklasse
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
DVG Einführung in Java1 Einführung in JAVA.
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Bestimmung des ggT zweier Zahlen
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2010/11 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Klassenhierarchien, Vererbung
EPROG Tutorium #5 Philipp Effenberger
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Instanzmethoden
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Lösung der Hausaufgaben von Vorlesung 10 Universität Bonn Institut für Kartografie und Geoinformation Dipl.-Ing. Dörschlag, Dr. Gröger, Prof. Dr. Plümer.
Einführung in Java PING e.V. Weiterbildung Andreas Rossbacher 24. März 2005.
Java-Kurs - 9. Übung Besprechung der Hausaufgabe
Erweiterte Zuweisungskompatibilität. Wie kann man Objekte verschiedener Klassen einer Klassenhierarchie einander zuweisen ?
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Konstruktoren.
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
Vererbung.
Venusspiegel und Marsschild
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Einführung in die Programmierung mit Java
Grundkurs Informatik 11-13
Vererbung.
Es gibt Klassen, die mit der Entwicklungsumgebung ausgeliefert werden
Mit Java die Turtle steuern
Ein Referat von Sabrina Vissel, darleen paul und yannick fuchs
9. Vererbung und Polymorphie
 Präsentation transkript:

Erweiterte Zuweisungskompatibilität

Wie kann man Objekte verschiedener Klassen einer Klassenhierarchie einander zuweisen ?

Beispiel:

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.

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 ")

Beispiel:

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.

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;

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?

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?

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?

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?

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?

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;

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?

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.

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

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.

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.

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)