Overloading, Overriding, Runtime Type and Object Orientation
- State the benefits of encapsulation in object oriented design and write code that implements tightly encapsulated classes and the relationships "is a" and "has a".
- Write code to invoke overridden or overloaded methods and parental or overloaded constructors; and describe the effect of invoking these methods.
- Write code to construct instances of any concrete class including normal top level classes and nested classes.
State the benefits of encapsulation in object oriented design and write code that implements tightly encapsulated classes and the relationships "is a" and "has a".
"is a" oder auf deutsch "ist ein" bedeutet, dass eine Klasse von einer anderen Klasse vererbt. In der objektorientierten Programmierung werden die Klassen nicht komplett neu geschrieben, sondern von einer existierenden Klasse abgeleitet. Die Beziehung zwischen den Klassen heisst dann, "B ist ein A". Die neue Klasse B erbt also alle Eigenschaften der Klasse A. Beispiel:Ein Haus ist ein Gebäude, wobei Gebäude die Superklasse von Haus ist, umgekehrt erbt Haus von Gebäude.
"has a" oder auf deutsch "hat ein" bedeutet, die Klasse hat die Membervariablen, wie z.B. ein Haus hat Fenster.
Write code to invoke overridden or overloaded methods and parental or overloaded constructors; and describe the effect of invoking these methods.
Überschreiben OverridingÜberschreiben einer Methode bedeutet, die Wiederverwendung einer Methode in einer Klassenhierarchie. Hierbei besteht die Methode in der neuen Klasse genau aus der gleichen Signatur, wie in der Superklasse. Unter der Signatur versteht man den Namen, die Parameterliste und den Rückgabewert.
Wenn die neue Methode den gleichen Namen und die gleiche Parameterliste hat, aber anderen Rückgabewert hat, so erscheint Compilerfehler. Es ist erlaubt den gleichen Namen, aber andere Parameterliste zu haben. Es ist aber keine Überschreibung.
Bei der überschriebenen Methode kann der Zugriff nicht weiter eingeschränkt werden, als bei der überschriebenen Methode.
- Eine public-Methode kann nur durch eine public Methode überschrieben werden.
- Eine protected Methode kann nur durch eine public- oder protected Methode überschrieben werden.
- Eine default-Methode kann nur überschrieben werden durch eine public-, protected- oder default-Methode.
- Eine private-Methode kann durch alle Methoden überschrieben werden. (es ist eigentlich keine Überschreibung. Es wird eine neue Methode definiert, da private-Methoden nicht vererbt werden können.
Die Methode wird zur Laufzeit aufgelöst.
Statische Methoden können nicht überschrieben werden. Eine Methode, die nicht-static ist, kann nicht als static überschrieben werden.
Eine Methode kann nur einmal überschrieben werden, damit kann eine Methode mit der gleichen Signatur nur einmal existieren.
Überschreibende Methoden können nicht mehr kontrollierte Exceptions erzeugen als die überschriebene Methode.
Möchte man, dass eine Methode nicht überschrieben wird, so wird diese Methode final deklariert.
Überladen Overloading
Beim Überladen wird eine Methode in der gleichen Klasse wiederbenutzt. Hierbei muss die neue Methode den gleichen Namen, aber andere Parameterliste haben. Wenn die neue Methode den gleichen Namen und die gleiche Parameterliste, aber anderen Rückgabewert hat, so kommt Compilerfehler.
Es gibt keine Einschränkungen bezüglich des Zugriffsmodifikators.
Die Methoden werden zur Kompilierzeit aufgelöst.
Es gibt keine Begrenzung bezüglich der Anzahl der überladenen Methoden.
Es gibt auch keine Einschränkungen bezüglich der Exceptions.
Konstruktoren
Konstruktoren können, wie die Methoden, überladen werden. Überladene Konstrutoren haben verschiedene Parameterliste. Der Name des Konstruktors wird vorgegeben durch den Namen der Klasse. Konstruktoren haben auch keinen Rückgabewert.
Elternkonstruktoren Parental Constructors
Jeder Konstruktor ruft zuerst den Konstruktor der Superklasse auf. Dieser ruft ebenfalls den Konstruktor der Superklasse auf usw. bis zur höchsten Ebene der Hierarchie. Wenn kein Konstruktor explizit definiert wurde, so erzeugt Java den Defaultkonstruktor. Wenn also der Konstruktor einer Klasse aufgerufen wird, so wird zuerst der Konstruktor der obersten Ebene ausgeführt und danach der Reihe nach, bis zur Ebene, wo unser erster Konstruktor ist.
Write code to construct instances of any concrete class including normal top level classes and nested classes.
Dieser Teil wurde im Abschnitt "Declaration and Acces Control" ausführlich beschrieben.