DVG2 - 01 - Klassen und Objekte Wiederholung DVG2 - 01 - Klassen und Objekte
Klassen-Definition in JAVA Klassendefinition bestehen aus Klassenkopf Name der Klasse Kennzeichnung als abstrakte Klasse (abstract) Kennzeichnung als finale Klasse (final) Modifizierer (public) Ableitung von anderen Klassen (extends) Realisierung von Interfaces (implements) Klassenrumpf Attribute (Eigenschaften, Daten) statische Initialisierer Konstruktoren (initialisiert ein Objekt der Klasse) Methoden (Schnittstellen, Prozeduren, Funktionen) interne Klassen DVG2 - 01 - Klassen und Objekte
Klassenkopf [public] [final] [abstract] class Bezeichner [extends Klasse] [implements Interface,...,Interface] public : Die Klasse ist für alle anderen Klassen sichtbar und verwendbar. Wenn nicht angegeben, ist die Klasse nur im selben package sichtbar und verwendbar (in C++ friendly). final: Von der Klasse können keine weiteren Klassen abgeleitet werden. abstract: Die Klasse enthält nicht vollständig definierte (abstrakte) Methoden. Es können keine Objekte von dieser Klasse erzeugt werden. final und abstract können nicht gleichzeitig verwendet werden! DVG2 - 01 - Klassen und Objekte
extends: Die Klasse erweitert eine bekannte Klasse. z.B.: public class Fahrzeug { ..... } public class Lastkraftwagen extends Fahrzeug {......} Lastkraftwagen ist eine Spezialisierung der Klasse Fahrzeug implements: Die Klasse implementiert ggf. mehrere Schnittstellen (interface) Interface sind (abstrakte) Klassen, die ausschließlich abstrakte Methoden enthalten. DVG2 - 01 - Klassen und Objekte
Attribute [Modifizierer] [final] Typ [ []...[] ] name [ = Initialisierer] ; Modifizierer : public , private, protected public : Daten sind aus allen anderen Klassen heraus lesbar und schreibbar. private : Daten sind nur in der Klasse lesbar und schreibbar, in der sie definiert sind. protected : Daten sind lesbar und schreibbar in Klassen die aus der Klasse abgeleitet wurden Klassen die zum selben Package gehören keine Angabe : Daten sind nur in allen Klassen lesbar und schreibbar die zum selben Package gehören. DVG2 - 01 - Klassen und Objekte
beliebiger primitiver Datentyp beliebiger Referenztyp Felder Klassen final : Daten können nie verändert werden und behalten immer den Wert der Initialisierung (Konstanten). Typ beliebiger primitiver Datentyp beliebiger Referenztyp Felder Klassen [] ... [] : Kennzeichnung für n-dimensionale Felder Initialisierer beliebiger Ausdruck Feldinitialisierer : {Initialisierer,..., Initialisierer} DVG2 - 01 - Klassen und Objekte
Methoden [Modifizierer] [final] [abstract] Typ Name ( [formaleParameterliste] ) [ []...[] ] [throws Ausnahme,...,Ausnahme] Block Modifizierer : public, private, protected public : Methoden sind aus allen anderen Klassen heraus benutzbar. private : Methoden sind nur in der Klasse benutzbar in der sie enthalten sind. protected : Methoden sind benutzbar in Klassen die aus der Klasse abgeleitet wurden Klassen die zum selben Package gehören keine Angabe : Methoden sind nur in allen Klassen benutzbar die zum selben Package gehören. DVG2 - 01 - Klassen und Objekte
final: Methoden können nie verändert werden. abstract: Von der Methode sind nur die Schnittstellen (Typ, Name, Parameterliste, ...) definierte, aber nicht der Körper. Damit muss die gesamte Klasse als abstract definiert werden. Von der Klasse können keine Objekte erzeugt werden. Typ: Typ des Wertes den die Methode zurückgibt (return-Anweisung) beliebiger primitiver Datentyp beliebiger Referenztyp Felder Klassen void wenn die Methode keinen Wert zurückgibt DVG2 - 01 - Klassen und Objekte
formaleParameterliste: Typ Name,...,Typ Name Die Klammern () müssen auch angegeben werden, wenn die Parameterliste leer ist! [] ... [] : Kennzeichnung für n-dimensionale Felder throws: Liste der Ausnahmen, die in der Methode eintreten können und nicht behandelt werde, die also nach außen gereicht werden. Block: { Anweisungsfolge } bei nicht-abstrakten Methoden ; bei abstrakten Methoden DVG2 - 01 - Klassen und Objekte
Konstruktoren [Modifizierer] Name ( [formaleParameterliste] ) [throws Ausnahme,...,Ausnahme] Rumpf Modifizierer : public , private, protected Modifizierer, formaleParameterliste, throws : wie bei Methoden Name ist der Name der Klasse kein Typ, auch nicht void ! Wenn kein Konstruktor definiert wird, wird der leere Konstruktor Name(){} automatisch generiert. Konstruktoren können überladen werden. Konstruktoren werden bei der Erzeugung (Instanziierung) von Objekten aufgerufen Name obj = new Name (...); DVG2 - 01 - Klassen und Objekte
Das Schlüsselwort this Mit Hilfe von this kann man sich auf das aktuelle Objekt beziehen. this: Referenz auf das aktuelle Objekt this(...): Konstruktor der aktuellen Klasse. Kann in einem Konstruktor als erste Anweisung aufgerufen werden. this.name: Zugriff auf überdeckte Attribute. DVG2 - 01 - Klassen und Objekte
Das Schlüsselwort super Mit Hilfe des Schlüsselwortes super kann man sich auf die Klasse beziehen aus der die aktuelle Klasse abgeleitet wurde (Superklasse). super(...): Konstruktor der Superklasse. Kann in einem Konstruktor als erste Anweisung aufgerufen werden. Wichtig, da Konstruktoren nicht vererbt werden können. super.name: Zugriff auf Attribute und Methoden der Superklasse. Falls in der direkten Superklasse kein passendes Attribut bzw. Methode gefunden wird, wird in deren Superklasse gesucht u.s.w. DVG2 - 01 - Klassen und Objekte
Der Operator instanceof Objekt instanceof Klasse Wert : boolean true : Objekt ist eine Instanz von Klasse oder einer direkten oder indirekten Subklasse von Klasse. false : sonst (obj instanceof Object) ist immer true für jedes Objekt obj Wichtig: Zuerst die zuletzt abgeleitete Klasse testen! DVG2 - 01 - Klassen und Objekte
Die Methode finalize [Modifizierer] void finalize () [throws Ausnahme,...,Ausnahme] Rumpf Modifizierer : public , private, protected Die Methode finalize wird aufgerufen, bevor ein Objekt durch Garbage-Collection vernichtet wird. Dient dem „Aufräumen“ z.B.: Schließen von Dateien Setzen von Zählern Freigabe von Ressourcen, die von in anderen Sprachen (z.B. C, C++) geschriebenen Programmen angefordert wurden. DVG2 - 01 - Klassen und Objekte
Statische Komponenten Alle Programme sind Klassen Klassen sind nur Definitionen Wer sagt also was abgearbeitet werden soll? Es gibt Konstanten und Methoden, die allgemein verfügbar sein sollen und nicht an Objekte gebunden sein sollten. Z.B.: Mathematische Konstanten: Pi=3.14159...; E=2.781... Physikalische Konstanten: c300000 km/s Mathematische Funktionen: sin(x), cos(x), ... Bestimmte Daten sollten eher an die Klasse als an die Objekte gebunden sein. Z.B. Zähler wie viele Punkte instanziiert wurden. Statusanzeiger DVG2 - 01 - Klassen und Objekte
Statische Attribute und Methoden Modifizierer static,sonst wie andere Attribute und Methoden, z.B.: private static int Anzahl = 0; public static float max(float x, float y) { return x>y?x:y; } Statische Initialisierer static { .... Beliebige Anweisungen } DVG2 - 01 - Klassen und Objekte
this ist nicht verfügbar. Statische Attribute und Methoden werden durch Klassenname.Attribut bzw. Klassenname.Methode oder durch Objektname.Attribut bzw. Objektname.Methode aufgerufen. Alle statischen Komponenten einer Klasse werden abgearbeitet, sobald das erste Mal auf eine statische Komponente der Klasse zugegriffen wird bzw. das erste Objekt der Klasse instanziiert wird. Nicht-statische Komponenten werden bei der Instaziierung eines Objektes der Klasse abgearbeitet. Es werden alle statischen Komponenten in der Reihenfolge ihres Auftretens abgearbeitet. Statische Komponenten werden nur einmal eingerichtet, unabhängig von der Anzahl der Objekte die von dieser Klasse instanziiert werden. In statischen Komponenten können nur andere statische Komponenten verwendet werden. this ist nicht verfügbar. DVG2 - 01 - Klassen und Objekte
Innere Klassen Strukturierungsmittel Möglichkeit Sichtbarkeiten zu beeinflussen besondere Möglichkeiten bei der Vererbung DVG2 - 01 - Klassen und Objekte
private, protected, public u.s.w. DVG2 - 01 - Klassen und Objekte