innere Klassen

Werbung
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
Herunterladen