9. Vererbung und Polymorphie

Slides:



Advertisements
Ähnliche Präsentationen
Kritische Betrachtung
Advertisements

Kapselung , toString , equals , Java API
Java: Objektorientierte Programmierung
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Abstrakte Klassen.
Erweiterte Zuweisungskompatibilität
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.
Polymorphie (Vielgestaltigkeit)
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Programmieren mit JAVA
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,
DVG Klassen und Objekte
Einführung in die Programmierung Vererbung
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Klassendefinitionen in Java
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
1.3 Klassen und Beziehungen
Objektorientierte Programmierung
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Vererbung Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
Vererbung. Klassen - Vererbung  Eine Klasse kann von einer Basisklasse abgeleitet werden  Die abgeleitete Klasse erbt die Eigenschaften und Methoden.
Java Programme nur ein bisschen objektorientiert.
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.
Objektorientiertes Modellieren und Programmieren mit Java
Klassen in Java.
Konstruktoren.
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
Vererbung.
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
Hello World! Javakurs 2013 Arne Kappen
Venusspiegel und Marsschild
OOP II.
Die Klasse Geist.
Einführung in die Programmierung mit Java
Die Klasse Vielfrass in Java
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
Informatik 10 – 3. Bedingte Anweisungen
Ein schematischer Kirschbaum in Java
Die Struktur einer Java-Klasse
Grundkurs Informatik 11-13
November 18 Informatik Kurse
6. Wiederholungen und Zählschleifen
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
Programmierung und Vererbung in Java
Informatik 10 – 3. Bedingte Anweisungen
Objektorientierte Programmierung und Vererbung
7. Arrays Gelegentlich braucht man für ein Programm mehrere Attribute desselben Datentyps oder derselben Klasse. Beispiel: In der Highscore-Liste eines.
OO-Programmierung & Vererbung
Es gibt Klassen, die mit der Entwicklungsumgebung ausgeliefert werden
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Polymorphie Überladen
Objektorientiertes Modellieren und Programmieren mit Java
Interfaces Definition von Interfaces Verwendung von Interfaces
2. Vererbung und Kapselung
«Delegierter» Methoden Schablone Funktionszeiger
1. Die rekursive Datenstruktur Liste 1
Datenstrukturen und Softwareentwicklung
Implementieren von Klassen
1. Die rekursive Datenstruktur Liste 1.6 Die Datenstruktur Stapel
Vererbung in Java Von Jan und Eddi.
Grundkurs Informatik 11-13
Juli 19 Informatik Kurse
 Präsentation transkript:

9. Vererbung und Polymorphie Informatik 10 – 9. Vererbung und Polymorphie

Informatik 10 – 9. Vererbung und Polymorphie Wiederholung Vererbung bedeutet, dass eine Klasse Attribute und Methoden an eine andere Klasse weitergeben kann. Im Klassendiagramm stellt man dies durch einen durchgezogenen Pfeil mit nicht ausgefüllter Spitze dar: Die Klasse HUND wird durch die Klasse PUDEL erweitert. Die Klasse, von der geerbt wird (hier: HUND) nennt man Superklasse, die erbende Klasse (hier: PUDEL) nennt man Subklasse. Informatik 10 – 9. Vererbung und Polymorphie

Informatik 10 – 9. Vererbung und Polymorphie Wiederholung Man sagt auch: Die Klasse PUDEL ist eine Spezialisierung von HUND, die Klasse HUND ist dagegen eine Generalisierung von PUDEL. Deshalb nennt man die Vererbung auch eine „ist-ein-Beziehung“. Ein Pudel ist ein Hund. Die Subklasse erbt alle Attribute und Methoden der Superklasse. Aus der Subklasse heraus kann man aber nur auf öffentliche Attribute und Methoden zugreifen. Eine Subklasse kann geerbte Methoden überschreiben. Das bedeutet, dass man die Funktion dieser Methode neu gestaltet. Informatik 10 – 9. Vererbung und Polymorphie

Informatik 10 – 9. Vererbung und Polymorphie Wiederholung Umsetzung in Java: public class BALL extends KREIS { String besitzer; public BALL() { super(); } public BALL(int rNeu) { super(rNeu); this.besitzer = "Hans"; } ... Klasse BALL erbt von Klasse KREIS Deklaration eines neuen Attributs Konstruktor 1 von BALL: Mit super() ruft man den Konstruktor KREIS() der Oberklasse auf. Konstruktor 2 von BALL: Aufruf eines Konstruktors der Oberklasse; Initialisierung des neuen Attributs Informatik 10 – 9. Vererbung und Polymorphie

Informatik 10 – 9. Vererbung und Polymorphie Erstelle ein neues BlueJ-Projekt, nenne es Vererbung_Tiere. a) Schreibe die Klasse HUND und deklariere und initialisiere die Attribute wie in der Objektkarte. Setze alle Attribute auf private. Außerdem soll es eine Methode public void setzeAlter(int alterNeu) geben. Informatik 10 – 9. Vererbung und Polymorphie

Informatik 10 – 9. Vererbung und Polymorphie b) Schreibe nun die Klasse PUDEL, die von HUND erbt. Erzeuge ein Objekt der Klasse PUDEL und betrachte die Attributwerte im Objektinspektor. Führe bei offenen Objektinspektor die Methode setzeAlter(...) aus und prüfe, was geschieht. Informatik 10 – 9. Vererbung und Polymorphie

Informatik 10 – 9. Vererbung und Polymorphie c) Überschreibe nun in der Klasse PUDEL die Methode setzeAlter(...) wie folgt: @Override public void setzeAlter(int alterNeu){ if(alterNeu > alter){ alter = alterNeu; } Weshalb erscheint eine Fehlermeldung vom Compiler? Informatik 10 – 9. Vererbung und Polymorphie

Informatik 10 – 9. Vererbung und Polymorphie Schreibe in der Klasse HUND eine Methode public int nenneAlter() und ändere in PUDEL die überschriebene Methode setzeAlter(...) so ab, dass keine Fehlermeldung mehr erscheint. Erzeuge ein Objekt von PUDEL und teste die Methode setzeAlter(...). Informatik 10 – 9. Vererbung und Polymorphie

Informatik 10 – 9. Vererbung und Polymorphie Deklariere in der Klasse PUDEL ein zusätzliches Attribut dressiert vom Typ boolean. Setze es auf private. Schreibe außerdem die zugehörigen setze- und nenne-Methoden für dieses Attribut. Informatik 10 – 9. Vererbung und Polymorphie

Informatik 10 – 9. Vererbung und Polymorphie f) Schreibe nun eine Klasse TESTER, welche über drei Referenzattribute verfügt: Sieh dir die dritte Initialisierung genau an und überlege, weshalb diese Konstruktion in dem Konzept der Vererbung möglich ist. public class TESTER{ private HUND hund1; private PUDEL hund2; private HUND hund3; public TESTER(){ this.hund1 = new HUND(); this.hund2 = new PUDEL(); this.hund3 = new PUDEL(); } Informatik 10 – 9. Vererbung und Polymorphie

Informatik 10 – 9. Vererbung und Polymorphie g) Versuche nun, die folgenden Fragen erst mündlich zu beantworten. Teste dann deine Vorhersagen, indem du in der Klasse TESTER eine Methode test() mit dem entsprechenden Code schreibst und die Objekte hund1, hund2 und hund3 genau im Objektinspektor beobachtest. Wie reagieren die Objekte hund1, hund2 und hund3 jeweils auf Aufrufe der Methode setzeAlter(...) bei negativen Werten des Übergabeparameters? Wie reagieren die Objekte hund1, hund2 und hund3 jeweils auf Aufrufe der Methode nenneDressiert() ? Informatik 10 – 9. Vererbung und Polymorphie

Informatik 10 – 9. Vererbung und Polymorphie Ein Pudel oder ein Dackel kann im Konzept der Vererbung offensichtlich auch allgemein als Hund betrachtet werden. Die Übung hat gezeigt, dass einem Referenzattribut des Supertyps (HUND) auch ein Objekt des Subtyps (PUDEL) zugewiesen werden kann. Unter dem Begriff Polymorphie versteht man, dass sich Objekte abhängig von ihrer Verwendung unterschiedlich darstellen können. Beispiel: hund1 hat den Typ HUND und führt die Methode setzeAlter(...) in der ursprünglichen Form (ohne if) aus. hund2 hat den Typ PUDEL und führt die Methode setzeAlter(...) in der spezielleren Form (mit if) aus. hund3 hat den Typ HUND, wird aber als Objekt von PUDEL erzeugt und führt deshalb die Methode setzeAlter(...) auch in der spezielleren Form (mit if) aus. Informatik 10 – 9. Vererbung und Polymorphie

Informatik 10 – 9. Vererbung und Polymorphie Gibt es Methoden der Superklasse, die in einer Subklasse überschrieben worden sind, so wird bei einem Objekt immer diejenige Variante ausgeführt, welche in der Vererbung an weitesten unten anzutreffen sind. Beispiel: private HUND hund3 = new PUDEL() setzeAlter(...) wird hier immer in der Variante der Klasse PUDEL ausgeführt. Diese Tatsache fasst man unter dem Begriff dynamische Bindung zusammen und meint damit, dass im Zweifelsfall immer die speziellere Variante einer Methode ausgeführt wird. Informatik 10 – 9. Vererbung und Polymorphie

Informatik 10 – 9. Vererbung und Polymorphie Verfügt allerdings die Subklasse über eine neue Methode, die in der Superklasse noch nicht enthalten ist, so kann diese Methode nur ausgeführt werden, wenn der Typ dazu passt. Beispiel: nenneDressiert() kann bei hund1 und hund3 nicht ausgeführt werden, da deren Typ HUND und nicht PUDEL ist, auch wenn hund3 sogar direkt als Objekt der Klasse PUDEL erzeugt wurde. Der Typ von hund3 bleibt aber dennoch HUND. Bei hund3 könnte man jedoch durch einen sogenannten Typ-Cast erzwingen, dass Methoden des Typs PUDEL trotzdem angewandt werden können: ((PUDEL)hund3).nenneDressiert() Informatik 10 – 9. Vererbung und Polymorphie

Informatik 10 – 9. Vererbung und Polymorphie Schreibe in der Klasse HUND zwei Methoden gibLaut(): public void gibLaut() schreibt “wau“ in ein Textfenster. public void gibLaut(int zahl) schreibt z.B. für zahl = 4 “wau wau wau wau“ in ein Textfenster. Beide Methoden dieser Klasse haben denselben Namen. Der Compiler unterscheidet die Methoden anhand der Anzahl und der Datentypen der Parameter. Man spricht in diesem Fall vom Überladen einer Methode. Informatik 10 – 9. Vererbung und Polymorphie

Informatik 10 – 9. Vererbung und Polymorphie i) Schreibe eine Klasse DACKEL, die von HUND erbt. Ein Dackel macht “kläff“ statt “wau“. Überschreibe die Methode public void gibLaut() . Deklariere in TESTER das Objekt HUND hi. Initialisiere es als hi = new DACKEL(). Was liefern die folgenden Aufrufe? hi.gibLaut() hi.gibLaut(3) Informatik 10 – 9. Vererbung und Polymorphie

Informatik 10 – 9. Vererbung und Polymorphie Arbeite das Projekt Kamele mithilfe der Anleitung durch. Informatik 10 – 9. Vererbung und Polymorphie