Java Vererbung. Inhalt

Ähnliche Dokumente
Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Java Einführung Vererbung und Polymorphie. Kapitel 13

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article

Einstieg in die Informatik mit Java

C++ - Objektorientierte Programmierung Vererbung

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

HSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2

Java für Bauingenieure

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Vererbung, Polymorphie

Programmieren in Java

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Vererbung und Polymorphie

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.

Einstieg in die Informatik mit Java

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Programmieren in Java

Vererbung P rogram m ieren 2 F örster/r iedham m er K apitel 11: V ererbung 1

Grundelemente objektorientierter Sprachen (1)

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Vererbung und Polymorphie

Objektorientierte Programmierung III

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

C++ - Objektorientierte Programmierung Polymorphie

Grundelemente objektorientierter Sprachen (1)

Programmierung Nachklausurtutorium

Einführung in die Programmierung

Javakurs für Anfänger

1 Abstrakte Klassen, finale Klassen und Interfaces

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Grundelemente objektorientierter Sprachen (1)

Polymorphie. 15. Java Objektorientierung II

Vererbung Was versteht man unter dem Begriff Vererbung?

Polymorphie. 15. Java Objektorientierung II

Vererbung. Was versteht man unter dem Begriff Vererbung?

Einführung in C# Teil 3. Matthias Nübling

Erste Java-Programme (Java Wiederholung & Vererbung)

Vorausgesetzte Grundkenntnisse. Inhalt. Klassenhierarchie und Vererbung. Vererbung. Klassenhierarchie und Vererbung. Einführung in C# Teil 3

3 Objektorientierte Konzepte in Java

Liste Programmieren Java Überblick

9. Vererbung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Selbststudium OOP1 & DAT Programmieren 2 F1203 Felix Rohrer

Programmieren in Java

PYTHON. 06 Objektorientierung II

Objektorientierung (OO)

9. Vererbung und Polymorphie. Informatik Vererbung und Polymorphie 1

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Programmieren 2 Java Überblick

Java: Vererbung. Teil 3: super()

Teil 2: OOP und JAVA (Vorlesung 11)

Programmierkurs C++ Polymorphismus

Javakurs für Anfänger

Überschreiben von Methoden

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

Algorithmen und Datenstrukturen 07

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Programmierkurs Java

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Das Interface-Konzept am Beispiel der Sprache Java

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Vererbung. Martin Wirsing. Ziele. Vererbung

Objektorientierte Programmierung Studiengang Medieninformatik

Vorkurs Informatik WiSe 15/16

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Klassen und ihre Beziehungen II: Einfache Vererbung und Abhängigkeit

Grundlagen Polymorphismus Eigenschaften virtueller Klassen Mehrfachvererbung bei ROOT. Mehrfache Vererbung. Daniel Beneckenstein. 21.

Einstieg in die Informatik mit Java

12 Abstrakte Klassen, finale Klassen und Interfaces

7. Übung Informatik II - Objektorientierte Programmierung

Begriffe 1 (Wiederholung)

Einführung in die Programmierung für NF. Vererbung

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

Programmierpraktikum 3D Computer Grafik

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Abschnitt 12: Vererbung und Polymorphismus

Einstieg in die Informatik mit Java

Die abstrakte Klasse Expression:

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

1 Einleitung Generizität Syntax... 2

Fragen zur OOP in Java

Javakurs für Anfänger

4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor:

Mapra: C++ Teil 6. Felix Gruber, Sven Groß. IGPM, RWTH Aachen. 13. Juni 2017

Exceptions und Vererbung

Einführung in die Programmiersprache Java II

Vererbung. Florian Adamsky, B. Sc. (PhD cand.) Softwareentwicklung im WS 2014/15.

IT I: Heute. Nachbetrachtung Wissensüberprüfungen. Einführung Vererbung. Roboter in becker.robots. falls Zeit: Scheduling 8.11.

14 Abstrakte Klassen, finale Klassen, Interfaces

Einführung in die Programmiersprache Java II

Java I Vorlesung Vererbung und Sichtbarkeit

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Transkript:

Java Vererbung Inhalt 1 Zielsetzung... 2 1.1 Bewertung... 2 2 Grundlagen der Vererbung... 2 2.1 Super und Subklassen... 2 3 Überladen von Methoden... 4 3.1 Unterschiedliche Parameter... 4 3.2 Gleiche Parameter unterschiedlicher Rückgabewert... 4 4 Überschreiben von Methoden... 5 5 Polymorphismus... 6 5.1 Grundlagen... 6 5.2 Zuordnung erst zur Laufzeit... 6 6 Beispielprojekt (Polymorphismus)... 7 7 Abstrakte Klassen... 8 8 History... 9 SEW(3)-OOP-Vererbung.doc Seite 1 25.05.2016

1 Zielsetzung Lerne die Grundlagen zur Vererbung kennen. Verstehe den Unterschied zwischen gleich lautenden Methoden aber unterschiedlichen Parametern (=Überladen von Methoden) und gleich lautenden Methoden mit gleichen Parametern aber in unterschiedlichen, abgeleiteten (=Überschreiben von Methoden) Klassen. Lerne was Polymorphismus ist und wie erst zur Laufzeit entschieden wird, welche Methoden wirklich ausgeführt werden. 1.1 Bewertung Abgabe des Beispielprojekts am Ende der Übungseinheit und die persönliche Mitarbeit werden zur Beurteilung zu gleichen Teilen herangezogen. 2 Grundlagen der Vererbung Vererbung basiert auf der Idee, dass Eltern ihren Kindern Eigenschaften mitgeben. Dabei wird eine Kind-Klasse nicht komplett neu definiert, sondern von seiner Vater-Klasse abgeleitet. 2.1 Super und Subklassen Im Falle einer Vererbung, erbt die Kindklasse alle Eigenschaften der Vaterklasse und kann nach Belieben eigene hinzufügen. In unserem Fall wäre also B von A abgeleitet. A wird als Superklasse, B als Subklasse bezeichnet. Hier die wichtigsten Bezeichnungen: Superklasse <-> Subklasse Oberklasse <-> Unterklasse Vater- oder Elternklasse <-> Kindklasse Basisklasse <-> Abgeleitete Klasse 2.1.1 Ableitung (extends) Eine Klasse erweitert durch das Schlüsselwort extends eine andere Klasse. Sie wird dann zur Unterklasse. Eine Oberklasse vererbt also Eigenschaften, und die Unterklasse erbt sie. Alle Klassen haben direkt oder indirekt die Klasse java.lang.object als Basisklasse. public class Unerklasse extends Oberklasse { SEW(3)-OOP-Vererbung.doc Seite 2 25.05.2016

Beispiel: public class Article { private int code; private String label; private double price;... public class CD extends Article { private String artist; private int songs;... public class Book extends Article { private String author; private int pages;... Damit ergibt sich das nachfolgende UML-Diagramm: 2.1.2 Super() Konstruktoren werden im Gegensatz zu Methoden nicht vererbt. Das heißt, eine Unterklasse muss ganz neue Konstruktoren angeben, denn mit den Konstruktoren der Oberklasse kann ein Objekt der Unterklasse nicht erzeugt werden. Java ruft im Konstruktor einer jeden Klasse (ausgenommen java.lang.object) automatisch den Default-Konstruktor der Oberklasse auf oder auch mit: super(); // ruft den Default-Konstruktorauf Will man nicht den Default-Konstruktor der Oberklasse, sondern einen anderen (parametrisierten) Konstruktor der Oberklasse anzusprechen, muss man super(...) mit Argumenten befüllen (angewendet auf das Beispiel Article siehe 2.1.1): // ruft den Konstruktor der Vaterklasse (Article) auf super(int code, String label, double price); SEW(3)-OOP-Vererbung.doc Seite 3 25.05.2016

3 Überladen von Methoden Überladen von Methoden hat nicht unbedingt etwas mit Vererbung zu tun, es kann in jeder Klasse verwendet werden und ist etwas anderes als das Überschreiben von Methoden (siehe Kapitel 4). Methoden haben bestimmte Merkmale an denen man sie erkennt: a) einen Namen b) die Anzahl, die Typen und die Reihenfolge der Parameter c) einen Rückgabewert Beispiel: String text = new String( Hallo ); String neuertext = text.substring(1,4); Wie lauten die Merkmale von der Methode substring? Name = substring Rückgabewert = String Parameteranzahl = 2, Parametertypen = int und int, Parametrreihenfolge = zuerst Start- dann End-Wert 3.1 Unterschiedliche Parameter Java erlaubt es, den Namen der Funktion gleich zu lassen, aber andere Parameter einzusetzen. Eine überladene Methode ist eine Funktion mit dem gleichen Namen wie eine andere Funktion, aber einer unterschiedlichen Parameterliste. text.substring(1,4); text.substring(1); 3.2 Gleiche Parameter unterschiedlicher Rückgabewert Liegt Unterscheid zweier Methoden innerhalb einer Klasse nur in ihrem Rückgabewert dann werden sie als gleich angesehen, dies führt zu einem Fehler. In der Klasse java.long.math gibt es beispielsweise mehrere Methoden gleichen Namens mit unterschiedlichen Rückgabewerten: public int abs(int i) {... public double abs(double d) {... Hier ist aber wieder ein unterschiedlicher Parametertyp der Grund für keine Fehlermeldung. Andere Beispiele wären die überladenen print-methoden in System.out. SEW(3)-OOP-Vererbung.doc Seite 4 25.05.2016

4 Überschreiben von Methoden Beim Überschreiben (eng. Overriding) von Methoden besitzt eine Methode in einer Kindklasse den Namen und die Parameterliste einer geerbten Methode der Vaterklasse. Durch diese neue Methode wird innerhalb der Unterklasse die ursprüngliche Methode der Oberklasse ersetzt. Regeln beim Überschreiben: Der Methodenname muss übereinstimmen. Die Parameterliste und der Rückgabetyp müssen gleich sein. Eine überschreibende Methode darf im Zugriff nicht eingeschränkter sein als die Ursprungsmethode. Beispiel: Public class Zweirad { public void fahren() { System.out.println("Zweirad: Vaterklasse"); public class Fahrrad extends Zweirad { public void fahren() { System.out.println("Fahrrad: Pedale betätigen"); public class Motorrad extends Zweirad { // public void fahren() { // System.out.println("Motorrad: Gashebel betätigen"); // SEW(3)-OOP-Vererbung.doc Seite 5 25.05.2016

public class Main { public static void main(string[] args) { Fahrrad z1 = new Fahrrad(); Motorrad z2 = new Motorrad(); z1.fahren(); z2.fahren(); Existiert in der Kindklasse Motorrad keine passende Methode fahren() so wird einfach die der Vaterklasse verwendet. Sobald aber die Kindklasse eine passende Methode besitzt wird diese auch verwendet. 5 Polymorphismus 5.1 Grundlagen Polymorphismus bedeutet soviel wie Vielgestaltigkeit, und deutet auf die Fähigkeit von Objektvariablen, Objekte unterschiedlicher Klassen aufzunehmen. 5.2 Zuordnung erst zur Laufzeit Schauen wir auf folgendes Beispiel: public class Main { public static void main(string[] args) { Zweirad z1 = new Fahrrad(); // Der zugewiesene Wert passt zum Typ, wenn er // vom gleichen Typ oder von einem Subtyp ist. Zweirad z2 = new Motorrad(); // Instanzen können Objekte auch von beliebigen Subtypen halten. z1.fahren(); // Zuordnung erst zur Laufzeit z2.fahren(); Ein Fahrrad ist nun mal ein Zweirad, hat alle Eigenschaften eines Zweirads. Dass es möglicherweise ein paar zusätzliche Eigenschaften besitzt, stört den Compiler nicht. Er hat nur sicherzustellen, dass die Eigenschaften eines Zweirads vollständig vorhanden sind. Die Zuordnung dieser Funktion zum Methodennamen erfolgt erst zur Laufzeit (dynamisches Binden). Anders herum funktioniert Polymorphismus nicht. SEW(3)-OOP-Vererbung.doc Seite 6 25.05.2016

6 Beispielprojekt (Polymorphismus) Eine allgemeine Superklasse (Vaterklasse) Fahrzeug soll durch 2 weitere Subklassen (Kindklassen) Kraftfahrzeug und Fahrrad erweitert werden (siehe unten). Ergänzt wird das ganze durch die Aufrufe im Hauptprogramm. Aufgabe: Folgender Code im Hauptprogramm soll zum laufen gebracht werden: Arralist liste = new ArrayList(); Fahrzeug f1 = new Kraftfahrzeug(35508, rot, 2500, 5.7); f1.fahren(255); liste.add(f1); Fahrzeug f2 = new Fahrrad(870, silber, 21); f2.fahren(28); liste.add(f2);... for(int i=0; i<liste.size(); i++) { Fahrzeug x =(Fahrzeug) liste.get(i); x. ausgabedaten(); Weiters: a) beim fahren sollen die gefahrenekm entsprechend erhöht werden b) beim fahren wird entsprechend dem Verbrauch der verbrauchtetreibstoff erhöht SEW(3)-OOP-Vererbung.doc Seite 7 25.05.2016

7 Abstrakte Klassen In Java ist es möglich, abstrakte Methoden zu definieren. Im Gegensatz zu den konkreten Methoden enthalten sie nur die Deklaration der Methode, nicht aber ihre Implementierung. Syntaktisch unterscheiden sich abstrakte Methoden dadurch, dass anstelle der geschweiften Klammern lediglich ein Semikolon steht. Zusätzlich wird die Methode mit dem Attribut abstract versehen. Abstrakte Methoden können nicht aufgerufen werden, sie definieren nur eine Schnittstelle. Erst durch Überlagerung in einer abgeleiteten Klasse und Implementierung des fehlenden Methodenrumpfes wird eine abstrakte Klasse konkret und kann aufgerufen werden. Eine Klasse, die mindestens eine abstrakte Methode enthält, wird selbst als abstrakt angesehen und muss ebenfalls mit dem Schlüsselwort abstract versehen werden. SEW(3)-OOP-Vererbung.doc Seite 8 25.05.2016

8 History Version Datum Name Bemerkung 1.00 24.02.2013 SACH Erstfassung 1.01 2.3.2013 SACH Kapitel 2.1.1 & 2.1.2 1.02 3.3.2013 SACH Kapitel 3 bis 5 1.03 10.3.2013 SACH Kapitel 7 SEW(3)-OOP-Vererbung.doc Seite 9 25.05.2016