Ein Vortrag im Rahmen des Wahlpflichtmoduls
„Fortgeschrittene Programmierung mit JAVA“
Themenspeicher
Strukturen objektorientierter Programmierung
(Wiederholung)
Klassen und Vererbung
Schnittstellen und Implementierung
Spezialfälle und Abgrenzung
Geschachtelte Klassen
Arten und Kerneigenschaften
Anwendungsgebiete und Beispiele
Implementierung
Diskussion
11/24/2011
Jesko Eggers | WS2011/2012
2
Grundstruktur, Modifizierer , Vererbung und Konsequenzen
11/24/2011
Jesko Eggers | WS2011/2012
3
Grundstruktur
Vaterklasse ist implizit
Quelltext:
java.lang.Object
Standardkonstruktur
Methoden „clone()“,
„equals(…)“, „getClass()“,
„toString()“ und Weitere
11/24/2011
Jesko Eggers | WS2011/2012
4
Modifizierer
„public“: öffentliche Sichtbarkeit
„abstract“: verhindert Objekterzeugung
„final“: verhindert Vererbung
11/24/2011
Jesko Eggers | WS2011/2012
5
Vererbung und Konsequenzen
Schlüsselwort „extends“
Ist-ein-Beziehung
Für die abgeleitete Klasse gilt…
alle Variablen u. Methoden der Vaterklasse sind mit
Gewissheit verfügbar (ggf. „super“)
Neue Variablen und Methoden können hinzugefügt,
Bestehende überschrieben werden (Ausnahme: „final“)
11/24/2011
Jesko Eggers | WS2011/2012
6
Grundstruktur, Zweck und Realisierung
11/24/2011
Jesko Eggers | WS2011/2012
7
Grundstruktur und Zweck
Keine Objekterzeugung wie bei abstrakter Klasse, aber
dahingegen…
kein Konstruktor möglich
alle Methoden implizit abstrakt
„static final“-Variablen möglich
Mehrfachimplementierung möglich, daher flexibler als
Vererbung
Einsatz...
als „Gerüst“
zu Markierungszwecken
Namensendung meist „…able“
11/24/2011
Jesko Eggers | WS2011/2012
8
Realisierung
Schlüsselwörter „Interface“ und „implements“
Quelltext:
11/24/2011
Jesko Eggers | WS2011/2012
9
Subschnittstellen, abstrakte Klassen und Top-Level Klassen
11/24/2011
Jesko Eggers | WS2011/2012
10
Spezialfälle
Abstrakte Klassen
Treten rein- und teilabstrakt auf
Einsatz als „Gerüst“ um…
Implementierungsaufwand einsparen
Redundanz beim Quelltext zu vermeiden
Subschnittstellen
Schnittstellen „erben“ Schnittstellen
Einsatz zur…
11/24/2011
Vermeidung von Redundanz
Verbesserung der Übersicht
Schnittstellen sollten nicht geändert werden!
Jesko Eggers | WS2011/2012
11
Abgrenzung
Die bisher vorgestellte Klassen sind immer direkt
erreichbar.
Sie bilden die Summe der Top-Level Klassen
Alle übrigen Klassen sind innere Klassen
11/24/2011
Jesko Eggers | WS2011/2012
12
Übersicht und Eckpfeiler
11/24/2011
Jesko Eggers | WS2011/2012
13
Übersicht
Typ
statische
innere Klasse
Mitgliedsklasse
Code class Out {
class Out {
static class In {}
class In {}
}
}
Lokale
Klasse
Anonyme innere
Klasse
class out {
Out() {
class In {}
}
}
Class Out {
Out() {
new Runnable() {
public void run() {}
};
}
}
[Ullenboom 2012], Tab 7.1
11/24/2011
Jesko Eggers | WS2011/2012
14
Statische innere Klasse
Keine „echten“ inneren Klassen (ORACLE)
In kann lediglich auf statische Variablen von Out
zugreifen
Zugriff von außen mit Out.In; ohne Instanz von Out
möglich.
Beispiel fuenfzehn.java
11/24/2011
Jesko Eggers | WS2011/2012
15
Mitgliedsklasse
Besitzt keine statischen Eigenschaften
<Referenz auf Out>.new <Name von In> erzeugt
Instanz von In
Zugriff auf Out von In durch Out.this.<Eigenschaft>
Warum geht das?
Weil der Klassenname eindeutig ist!
Beispiel sechzehn.java
11/24/2011
Jesko Eggers | WS2011/2012
16
Lokale Klasse
Sind in Anweisungsblöcken von Methoden verankert
Keine Sichtbarkeitsmodifizierer, Klassenmethoden
und statische Variablen
Beispiel siebzehn.java
11/24/2011
Jesko Eggers | WS2011/2012
17
Anonyme innere Klasse
Automatische Objekterzeugung bei
Klassendeklaration
Objekt hat keinen Namen
Kein eigener Konstruktor, Verwendung von
Exemplarinitialisierungsblöcken möglich
Nur finale und statische Variablen sowie
Objektmethoden
Keine zusätzlichen Implementierungen und
Vererbungen möglich
Beispiel achtzehn.java
11/24/2011
Jesko Eggers | WS2011/2012
18
Aufzählung und Event-Handler
11/24/2011
Jesko Eggers | WS2011/2012
19
Aufzählung
Farben rot, grün, blau sollen gespeichert werden.
3 Implementierungen
ohne geschachtelte Klassen
mit geschachtelten Klassen händisch
mit geschachtelten Klassen automatisch („enum“)
Beispiel zwanzig.java (frei nach [Middendorf u.a.
2003] )
11/24/2011
Jesko Eggers | WS2011/2012
20
Event-Handler
Implementierung als anonyme innere Klasse nach
[Middendorf u.a. 2003]
Frame frame = new Frame();
frame.addWindowListener(new WindowAdapter() {
public void windowIconified(WindowEvent e) {
animator.stop();
}
public void windowDeiconified(WindowEvent e) {
animator.start();
}
});
11/24/2011
Jesko Eggers | WS2011/2012
21
Modifizierer
Modifizierer
erlaubt auf
Äußeren
Klassen
Inneren
Klassen
Äußeren
Inneren
Schnittstellen Schnittstellen
public
protected
private
static
final
abstract
[Ullenboom 2012], Tab 7.2
11/24/2011
Jesko Eggers | WS2011/2012
23
Compiler-Behandlung und deren Folgen
11/24/2011
Jesko Eggers | WS2011/2012
24
Compiler
Ausführung von Bytecode ab Java 1.0 möglich (keine
JRE-Änderung)
Kompilierung von Quelltext ab Java 1.1 möglich
(Compileranpassung)
Erzeugung von Top-Level-Klassen aus den inneren
Klassen nach der Namenskonvention: Out$In.class
11/24/2011
Jesko Eggers | WS2011/2012
25
Zugriffsrechte
Zugriff mittels paketsichtbarer access$XXX()-
Methoden
Gefahr bei eingeschmuggelten Klassen
Pakete sind im Java-Archiv zu schützen („Java sealing“)
11/24/2011
Jesko Eggers | WS2011/2012
26
[Ullenboom 2012] ULLENBOOM, Christian: Java ist auch eine Insel.
Galileo Computing, 2012
[Middendorf u. a. 2003] MIDDENDORF, Stefan; SINGER, Reiner;
HELD, Jörg: JAVA Programmierhandbuch und Referenz.
dpunkt.verlag GmbH, 2003
11/24/2011
Jesko Eggers | WS2011/2012
27