- Erste Objekte
- Was ist ein Objekt?
- Objekt? Klasse?
- Unsere erste Klasse: Fahrzeug
- Daten und Methoden
- Konstruktoren
- Überladen
- Benutzung von Fahrzeug
- Wie wird ein Objekt instanziiert?
- Wie wird ein Objekt benutzt?
- Vererbung
- Warum wurde
personenGeeignet
nicht vererbt?
- Warum wurde die 2 Konstruktoren von Fahrzeug nicht an Auto vererbt?
- Was bedeutet
super(n,v);
im Konstruktor von Auto
- Die Klasse Auto definiert erneut die Methode
toString()
, die
es schon in Fahrzeug gab?
- Übung: wie wird die Klasse Auto benutzt? Was wird folgendes Programm
ausgeben?
- Relationen zwischen Objekten
- Zusammenfassung
- Übungen
- PersonenWagen
- Autobahn
Es ist ein Konstrukt aus der Informatik welches die Eigenheit besitzt zwei
Sachen zu gruppieren:
- Die Daten, die den eigentlichen Wert des Objektes, seinen
aktuelle Zustand ausmachen.
- Die Methoden, die es erlauben auf diese Daten Einfluß zu nehmen.
Einkapselug
Die objektorientierte Philosophie sieht vor, daß ein Objekt eine
undurchsichtige Schachtel ist, so daß die Innereien von aussen nicht sichtbar
sind. Um die Daten die irgendwo im Inneren versteckt sind, zu verändern werden
die (öffentlichen) Methoden desselben Objektes benutzt.
Datei Fahrzeug.java
- Zu beachten, daß alle Daten entweder
protected
oder
private
definiert wurden (es wird noch später auf den Unterschied
eingegangen).
- Alle Methoden wurden
public
definiert (d.h. öffentlich).
- Alle Methoden können ungehindert auf die internen Daten des Objektes
zugreifen.
Bevor ein Objekt benutzt werden kann, muß es erst einmal erzeugt werden, dazu
werden spezielle Methoden benutzt, die Konstruktoren genannt werden. Diese
Konstruktoren müssen folgenden Kriterien entsprechen:
- Der Name dieser Methode muß dem Namen der Klasse entsprechen.
- Es darf kein Rückgabetyp definiert werden.
- Es ist in der Regel sinnvol diesen Konstruktor als
public
zu
definieren.
In dem Beispiel haben wir zwei Methoden, die den gleichen Namen tragen (die
Konstruktoren). Die erste braucht keine Argumente, die zweite eine Zeichenkette
und eine natürliche Zahl als Argumente. Dies ist möglich dank dem Konzept des
Überladens.
Wie in vielen Objektorientierten Sprachen ist es in Java möglich mehrere
gleichnamige Methoden zu haben, vorausgesetzt sie unterscheiden sich in der
Liste der Argumente. Der Kompiler wird den Unterschied anhand der
Parameter-Liste machen.
Die Fahrzeug-Klasse ist vollständig, aber es ist weder ein Applet (ist nicht von
Applet abgeleitet) noch ein eigenständiges Programm (keine main-Methode). Es
wird also eine weitere Klasse gebraucht um diese Fahrzeuge zu erzeugen.
- Es deklarieren. Beispiel:
Fahrzeug Schubkarre
- Einen Konstruktor aufrufen. Beispiel:
Schubkarre = new
Fahrzeug("Schubkarre",1);
Beide Aktionen keinen auf eine Zeile geschrieben werden. Beispiel:
Fahrzeug fahrzeug = new Fahrzeug();
Erst wenn ein Objekt ins Leben gerufen (instanziiert) wurde, kann es benutzt
werden, indem dessen öffentliche Methoden aufgerufen werden, so ähnlich wie
Felder in C-Strukturen adressiert werden. Nach dem Schema, Objektname,
Methodenname, durch Punkt ('.') getrennt.
- Syntax
-
Objektname.öffentlicheMethodeName(Parameter);
oder Objektname.öffentlicheVariable
- Beispiel
- Fahrrad.toString();
- Fahrrad.istPersonenGeeignet();
Angenommen wir wollen jetzt ein Objekt von Typ Auto, welches die Eigenschaften
von Fahrzeug besitzt, und noch andere dazu. Es wäre sinnvoll die in Fahrzeug
gesteckte Arbeit wiederzuverwenden. Dazu dient die Vererbung, wichtige
Eigenschaft von objektorientierten Sprachen.
Vererbung ist eine Relation zwischen Klassen. In dem Moment in dem eine
Klasse von einer anderen erbt, übernimmt sie von dieser alle als
protected
oder public
definierten Daten und Methoden.
Diese Relation wird durch das Schlüsselwort extends
gekennzeichnet.
Damit wird die Struktur der Klasse Auto:
Die kursiv geschriebenen Zeilen bezeichnen die Teile welche von der
Mutter-Klasse, in diesem Fall Fahrzeug,
übernommen wurden. Zu beachten, daß die Methode verbessern das Feld
Geschwindigkeit benutzt, als ob es in der Klasse Auto deklariert worden wäre.
Andererseits ist es nicht möglich auf das Feld personenGeeignet von der
Mutterklasse zuzugreifen, da dieses dort als privat
deklariert
worden war. Dieses Schlagwort bewirkt daß damit geschützte Entitäten weder von
außen noch von abgeleiteten Klassen aus zugegriffen werden können.
Zugriffe die von woanders als der eigentlichen Klasse gemacht werden (also z.B.
ein Zugriff auf personenGeeignet von Auto aus) werden schon vom Kompiler
abgefangen, und geben eine Fehlermeldung. Nur was als public
oder
protected
deklariert wurde, wird vererbt.
In Java werden die Konstruktoren nicht vererbt. Erklärungen dazu später...
super
ist ein Schlüsselwort das für die Mutterklasse steht, die
oben gennante Sequenz wird den Konstruktor mit 2 Argumenten der Klasse Fahrzeug
aufrufen. Diese Anweisung kann nur als erste Zeile in einem
Konstruktor erscheinen, falls anderer Code an der Stelle steht, wird ein
implizites super()
angenommen.
Das bedeutet, daß alle Konstruktoren von der höchsten Mutter-Klasse aus
successif durchlaufen werden.
Dies ist eine der Möglichkeiten der Vererbung. Eine Klasse die von einer
anderen erbt, kann die Methoden der super-Klasse (Mutterklasse) neu definieren.
Es stellt eine Methode dar, um die Funktionalität der Mutterklasse anzupassen.
Im Gegensatz zum Überladen, erlaubt die Neudefinition es, genau die gleiche
Parameterliste zu besitzen wie die Methode aus der Mutterklasse. Diese kann
allerdings immer noch angesprochen werden (über super
, z.B.
String meldung = super.toString();
).
Im Rahmen der Überlegungen über die Struktur eines Objektorientierten
Programms, besteht der erste Schritt darin, die zu benutzenden Objekte zu
isolieren. Der zweite darin die verschiedenen Relationen zwischen diesen
Objekten aufzuzeichnen. Es gibt foglende Grundrelationen:
- A ist ein B
- Dies ist eine Vererbungsrelation, in der A von B abegeleitet wurde. Man
kann auch sagen A ist eine Spezialisierung von B. Ein typisches Beispiel: ein
Auto ist ein Fahrzeug, oder ein Fahrzeug ist ein Objekt.
Dies schließt nicht aus, daß es significative Unterschiede zwischen A und B
gibt, es können ja in A alle Methoden von B komplett anders implementiert
werden, zusätzlich zu Daten und Methoden die der Klasse A angefügt werden
können.
- A benutzt ein, besteht aus B
- Hier besteht keine Vererbungsrelation, allerdings braucht die eine Klasse
die andere um zu bestehen. Z.B. braucht Auto eine Klasse Motor. Konkret in der
Klasse A wurden ein oder mehrere Objekte des Typs B als Daten angemeldet.
Dadurch können alle Methoden von A Objekte vom Typ B benutzen.
- A hat nichts gemeinsam mit B
- Genau, man muß nicht immer versuchen irgendeine Relation mit einer anderen
Klasse zu suchen.
- Was ist ein Objekt?
- Was ist der Unterschied zwischen einer Klasse und einem Objekt?
- Wozu dienen die Schlüsselworte private, protected und public?
- Kann eine Methode private, Daten public deklariert werden?
- Was ist vererbung?
- Was ist die Rolle des Konstruktors
- Was ist der Unterschied zwischen Redefinition und Überladen?