Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Ähnliche Dokumente
Einstieg in die Informatik mit Java

Geschachtelte Klassen

Vererbung, Polymorphie

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Objektorientierte Programmierung und Klassen

Einstieg in die Informatik mit Java

Geschachtelte Klassen

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

4. Vererbung Die Klasse Object. Die Klasse Object

Einstieg in die Informatik mit Java

Implementieren von Klassen

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

3 Objektorientierte Konzepte in Java

Zeichenketten. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java. 16.

Repetitorium Informatik (Java)

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Innere Klassen in Java

Hüllklassen. Gerd Bohlender. 25. Juni Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen

Prof. W. Henrich Seite 1

Programmieren in Java

Klassen mit Instanzmethoden

Einstieg in die Informatik mit Java

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Einstieg in die Informatik mit Java

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article

Programmieren in Java

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Objektorientierung

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Einstieg in die Informatik mit Java

3 Objektorientierte Konzepte in Java

1 Klassen und Objekte

Tag 7 Repetitorium Informatik (Java)

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Klassen als Datenstrukturen

Java Einführung Vererbung und Polymorphie. Kapitel 13

Programmiertechnik Objektorientierung

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Info B VL 11: Innere Klassen/Collections

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

1 Abstrakte Klassen, finale Klassen und Interfaces

Ereignisverwaltung und Layout-Typen

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Klassenbeziehungen & Vererbung

5 Vererbung. Subklassen, Superklassen, Pakete Zugriffsrechte

Objektorientierte Programmierung. Kapitel 14: Interfaces

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Arten von Klassen-Beziehungen

7. Übung Informatik II - Objektorientierte Programmierung

Swing. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Deklaration einer Klasse Innere innerhalb Klassen einer in Ja anderen v a Klasse

Klassenvariablen, Klassenmethoden

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Schöner Programmieren

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

Programmieren I. Kapitel 10. Spezielle Features

Statische und Nichtstatische Methoden Properties/ Eigenschaften

Einstieg in die Informatik mit Java

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

Einstieg in die Informatik mit Java

Objektorientierte Programmierung Studiengang Medieninformatik

Durch die Teil-von-Beziehung soll ausgedrückt werden, dass ein Objekt A als (physikalischer) Teil eines Objekts B angesehen wird. Insbesondere kann ei

C++ Klassen weitere Funktionen

Java I Vorlesung Vererbung und Sichtbarkeit

Schöner Programmieren

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

Java Vererbung. Inhalt

Modularisierung in Java: Pakete Software Entwicklung 1

6. Globalübung (zu Übungsblatt 8)

HSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2

12 Abstrakte Klassen, finale Klassen und Interfaces

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

Einstieg in die Informatik mit Java

Vererbung. Martin Wirsing. Ziele. Vererbung

Vorlesung Datenstrukturen

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

Vererbung. Was versteht man unter dem Begriff Vererbung?

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Einstieg in die Informatik mit Java

Objektorientierte Programmierung

Allgemeines - Prinzipien

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Überschreiben von Methoden

Philipp Güttler Objektorientierung und komplexe Datentypen

Transkript:

Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 13.06.07 G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 1 / 11

Übersicht 1 Einführung 2 Element-Klassen 3 Lokale Klassen 4 Anonyme Klassen 5 static geschachtelte Klassen und Schnittstellen G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 2 / 11

Einführung Innere Klassen sind geschachtelte Klassen, d.h. eine Klasse wird in einer anderen deklariert. Das bringt die folgenden Vorteile mit sich: zusammengehörige Klassen werden zusammengefasst, G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 3 / 11

Einführung Innere Klassen sind geschachtelte Klassen, d.h. eine Klasse wird in einer anderen deklariert. Das bringt die folgenden Vorteile mit sich: zusammengehörige Klassen werden zusammengefasst, die Sichtbarkeit wird kontrolliert, G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 3 / 11

Einführung Innere Klassen sind geschachtelte Klassen, d.h. eine Klasse wird in einer anderen deklariert. Das bringt die folgenden Vorteile mit sich: zusammengehörige Klassen werden zusammengefasst, die Sichtbarkeit wird kontrolliert, Namenskonflikte mit anderen Objekten im gleichem Paket werden vermieden. G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 3 / 11

Einführung Innere Klassen sind geschachtelte Klassen, d.h. eine Klasse wird in einer anderen deklariert. Das bringt die folgenden Vorteile mit sich: zusammengehörige Klassen werden zusammengefasst, die Sichtbarkeit wird kontrolliert, Namenskonflikte mit anderen Objekten im gleichem Paket werden vermieden. Geschachtelte Klassen können unabhängig vom Modifizierer gegenseitig auf ihre Komponenten und Methoden zugreifen. G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 3 / 11

Einführung Innere Klassen sind geschachtelte Klassen, d.h. eine Klasse wird in einer anderen deklariert. Das bringt die folgenden Vorteile mit sich: zusammengehörige Klassen werden zusammengefasst, die Sichtbarkeit wird kontrolliert, Namenskonflikte mit anderen Objekten im gleichem Paket werden vermieden. Geschachtelte Klassen können unabhängig vom Modifizierer gegenseitig auf ihre Komponenten und Methoden zugreifen. G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 3 / 11

Element-Klassen Die innere Klasse wird bei den Elementen der äußeren Klasse deklariert. Die Klassennamen müssen sich unterscheiden. Die innere Klasse benötigt eine Instanz der äußeren Klasse. G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 4 / 11

Element-Klassen Die innere Klasse wird bei den Elementen der äußeren Klasse deklariert. Die Klassennamen müssen sich unterscheiden. Die innere Klasse benötigt eine Instanz der äußeren Klasse. Der Modifizierer der inneren Klasse ist frei wählbar, d.h. er hängt nicht vom Modifizierer der äußeren Klasse ab. G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 4 / 11

Element-Klassen Die innere Klasse wird bei den Elementen der äußeren Klasse deklariert. Syntax Die Klassennamen müssen sich unterscheiden. Die innere Klasse benötigt eine Instanz der äußeren Klasse. Der Modifizierer der inneren Klasse ist frei wählbar, d.h. er hängt nicht vom Modifizierer der äußeren Klasse ab. class Aussen { // Daten und Methoden class Innen { // Daten und Methoden } } G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 4 / 11

Element-Klassen Die innere Klasse wird bei den Elementen der äußeren Klasse deklariert. Syntax Die Klassennamen müssen sich unterscheiden. Die innere Klasse benötigt eine Instanz der äußeren Klasse. Der Modifizierer der inneren Klasse ist frei wählbar, d.h. er hängt nicht vom Modifizierer der äußeren Klasse ab. class Aussen { // Daten und Methoden class Innen { // Daten und Methoden } } G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 4 / 11

Element-Klassen Bei der Kompilierung legt der Kompiler für die innere Klasse eine separate class-datei an, im obigen Beispiel: Achtung Aussen$Innen.class Elementklassen dürfen keine statischen Komponenten, Methoden oder Klassen enthalten, solange die Elementklasse nicht selber static ist! G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 5 / 11

Element-Klassen Bei der Kompilierung legt der Kompiler für die innere Klasse eine separate class-datei an, im obigen Beispiel: Achtung Aussen$Innen.class Elementklassen dürfen keine statischen Komponenten, Methoden oder Klassen enthalten, solange die Elementklasse nicht selber static ist! G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 5 / 11

Lokale Klassen Lokale Klassen werden in einem Block in einer Methode der äußeren Klasse deklariert. Die Klassennamen müssen sich unterscheiden. G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 6 / 11

Lokale Klassen Lokale Klassen werden in einem Block in einer Methode der äußeren Klasse deklariert. Die Klassennamen müssen sich unterscheiden. Es sind keine Modifizierer sowie statische Komponenten erlaubt. G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 6 / 11

Lokale Klassen Lokale Klassen werden in einem Block in einer Methode der äußeren Klasse deklariert. Die Klassennamen müssen sich unterscheiden. Es sind keine Modifizierer sowie statische Komponenten erlaubt. Zugriffe auf lokale Konstanten der äußeren Klasse sind erlaubt, dabei müssen die Konstanten allerdings vor der inneren Klasse definiert sein, Zugriffe auf lokale Variablen der äußeren Klasse sind hingegen verboten (Bei der Kompilierung wird eine separate class Datei erzeugt, die eine Kopie der lokalen Variablen enthält.). G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 6 / 11

Lokale Klassen Lokale Klassen werden in einem Block in einer Methode der äußeren Klasse deklariert. Achtung Die Klassennamen müssen sich unterscheiden. Es sind keine Modifizierer sowie statische Komponenten erlaubt. Zugriffe auf lokale Konstanten der äußeren Klasse sind erlaubt, dabei müssen die Konstanten allerdings vor der inneren Klasse definiert sein, Zugriffe auf lokale Variablen der äußeren Klasse sind hingegen verboten (Bei der Kompilierung wird eine separate class Datei erzeugt, die eine Kopie der lokalen Variablen enthält.). Ist die Methode statisch, so darf in der inneren Klasse nur auf statische Elemente der äußeren Klasse zugegriffen werden, andernfalls auf alle! G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 6 / 11

Lokale Klassen Lokale Klassen werden in einem Block in einer Methode der äußeren Klasse deklariert. Achtung Die Klassennamen müssen sich unterscheiden. Es sind keine Modifizierer sowie statische Komponenten erlaubt. Zugriffe auf lokale Konstanten der äußeren Klasse sind erlaubt, dabei müssen die Konstanten allerdings vor der inneren Klasse definiert sein, Zugriffe auf lokale Variablen der äußeren Klasse sind hingegen verboten (Bei der Kompilierung wird eine separate class Datei erzeugt, die eine Kopie der lokalen Variablen enthält.). Ist die Methode statisch, so darf in der inneren Klasse nur auf statische Elemente der äußeren Klasse zugegriffen werden, andernfalls auf alle! G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 6 / 11

Beispiel class Aussen { private int var1; public void methode () { int var2; final int konst1 = 333; class Innen { // innere Klasse Innen () { // Konstruktor System.out.println(var1); // ok System.out.println(var2); // Fehler! System.out.println(konst1); // ok } } } new Innen(); // Konstruktor-Aufruf } public static void main(string[] s) { Aussen Referenz = new Aussen (); Referenz.methode (); } G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 7 / 11

Anonyme Klassen Manchmal werden Klassen (Subklassen, Implementierungen einer Schnittstelle) nur für eine einzige Instanz benötigt. Beispiel... class MeineKlasse extends Vorlage { void info() {... } // Methode ueberschreiben } MeineKlasse m = new MeineKlasse (); // einmalig Instanz bilden... G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 8 / 11

Anonyme Klassen Manchmal werden Klassen (Subklassen, Implementierungen einer Schnittstelle) nur für eine einzige Instanz benötigt. Beispiel... class MeineKlasse extends Vorlage { void info() {... } // Methode ueberschreiben } MeineKlasse m = new MeineKlasse (); // einmalig Instanz bilden... G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 8 / 11

Anonyme Klassen Dies kann einfacher mit einer anonymen Klasse formuliert werden. Anonyme Klassen sind lokal und verzichten auf einen Bezeichner, also einen Namen für die Klasse. Beispiel... Vorlage m = new Vorlage() {void info() {... }};... Es wird eine abgeleitete Klasse der Klasse Vorlage gebildet und die Methode info() ersetzt. Weiterhin wird eine Instanz der anonymen Klasse erzeugt, die den Typ der Superklasse besitzt. G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 9 / 11

Anonyme Klassen Dies kann einfacher mit einer anonymen Klasse formuliert werden. Anonyme Klassen sind lokal und verzichten auf einen Bezeichner, also einen Namen für die Klasse. Beispiel... Vorlage m = new Vorlage() {void info() {... }};... Es wird eine abgeleitete Klasse der Klasse Vorlage gebildet und die Methode info() ersetzt. Weiterhin wird eine Instanz der anonymen Klasse erzeugt, die den Typ der Superklasse besitzt. G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 9 / 11

Anonyme Klassen Anonyme Klassen können nur mit Schnittstellen bzw. Basisklassen gebildet werden. Definitionen eigener neuer Methoden sind nicht sinnvoll, da diese nicht angesprochen werden können. G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 10 / 11

Anonyme Klassen Anonyme Klassen können nur mit Schnittstellen bzw. Basisklassen gebildet werden. Definitionen eigener neuer Methoden sind nicht sinnvoll, da diese nicht angesprochen werden können. Es kann kein (expliziter) Konstruktor gebildet werden. Damit ist der Zugriff auf den super-konstruktor ebenfalls nicht möglich. G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 10 / 11

Anonyme Klassen Anonyme Klassen können nur mit Schnittstellen bzw. Basisklassen gebildet werden. Definitionen eigener neuer Methoden sind nicht sinnvoll, da diese nicht angesprochen werden können. Es kann kein (expliziter) Konstruktor gebildet werden. Damit ist der Zugriff auf den super-konstruktor ebenfalls nicht möglich. Es ist insgesamt nur eine Instanz möglich. G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 10 / 11

Anonyme Klassen Anonyme Klassen können nur mit Schnittstellen bzw. Basisklassen gebildet werden. Definitionen eigener neuer Methoden sind nicht sinnvoll, da diese nicht angesprochen werden können. Es kann kein (expliziter) Konstruktor gebildet werden. Damit ist der Zugriff auf den super-konstruktor ebenfalls nicht möglich. Es ist insgesamt nur eine Instanz möglich. Der Kompiler erzeugt für diese Instanz eine eigene class-datei (an den Namen der äußeren Klasse wird eine fortlaufende Nummer angehängt, also z.b. Aussen$1.class). G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 10 / 11

Anonyme Klassen Achtung Anonyme Klassen können nur mit Schnittstellen bzw. Basisklassen gebildet werden. Definitionen eigener neuer Methoden sind nicht sinnvoll, da diese nicht angesprochen werden können. Es kann kein (expliziter) Konstruktor gebildet werden. Damit ist der Zugriff auf den super-konstruktor ebenfalls nicht möglich. Es ist insgesamt nur eine Instanz möglich. Der Kompiler erzeugt für diese Instanz eine eigene class-datei (an den Namen der äußeren Klasse wird eine fortlaufende Nummer angehängt, also z.b. Aussen$1.class). Es sind keine statische Komponenten erlaubt! G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 10 / 11

Anonyme Klassen Achtung Anonyme Klassen können nur mit Schnittstellen bzw. Basisklassen gebildet werden. Definitionen eigener neuer Methoden sind nicht sinnvoll, da diese nicht angesprochen werden können. Es kann kein (expliziter) Konstruktor gebildet werden. Damit ist der Zugriff auf den super-konstruktor ebenfalls nicht möglich. Es ist insgesamt nur eine Instanz möglich. Der Kompiler erzeugt für diese Instanz eine eigene class-datei (an den Namen der äußeren Klasse wird eine fortlaufende Nummer angehängt, also z.b. Aussen$1.class). Es sind keine statische Komponenten erlaubt! G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 10 / 11

static geschachtelte Klassen und Schnittstellen Statisch geschachtelte Klassen bzw. Schnittstellen verhalten sich wie Elementklassen, sind jedoch zusätzlich mit dem Schlüsselwort static versehen. Sie besitzen keinen Bezug zu einer Instanz und sind daher sogenannte Top-Level Klassen bzw. Top-Level Schnittstellen. G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 11 / 11

static geschachtelte Klassen und Schnittstellen Statisch geschachtelte Klassen bzw. Schnittstellen verhalten sich wie Elementklassen, sind jedoch zusätzlich mit dem Schlüsselwort static versehen. Sie besitzen keinen Bezug zu einer Instanz und sind daher sogenannte Top-Level Klassen bzw. Top-Level Schnittstellen. Von außen über die Klassennamen Aussen.Innen ansprechbar. G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 11 / 11

static geschachtelte Klassen und Schnittstellen Statisch geschachtelte Klassen bzw. Schnittstellen verhalten sich wie Elementklassen, sind jedoch zusätzlich mit dem Schlüsselwort static versehen. Sie besitzen keinen Bezug zu einer Instanz und sind daher sogenannte Top-Level Klassen bzw. Top-Level Schnittstellen. Von außen über die Klassennamen Aussen.Innen ansprechbar. Außer beim Namen besitzt diese Klassengattung keine echte Schachtelung. G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 11 / 11

static geschachtelte Klassen und Schnittstellen Statisch geschachtelte Klassen bzw. Schnittstellen verhalten sich wie Elementklassen, sind jedoch zusätzlich mit dem Schlüsselwort static versehen. Sie besitzen keinen Bezug zu einer Instanz und sind daher sogenannte Top-Level Klassen bzw. Top-Level Schnittstellen. Von außen über die Klassennamen Aussen.Innen ansprechbar. Außer beim Namen besitzt diese Klassengattung keine echte Schachtelung. Eine statisch geschachtelte Schnittstelle darf eine Klasse enthalten, welche (implizit) statisch ist und daher eine Top-Level Klasse ist. G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 11 / 11

static geschachtelte Klassen und Schnittstellen Statisch geschachtelte Klassen bzw. Schnittstellen verhalten sich wie Elementklassen, sind jedoch zusätzlich mit dem Schlüsselwort static versehen. Sie besitzen keinen Bezug zu einer Instanz und sind daher sogenannte Top-Level Klassen bzw. Top-Level Schnittstellen. Von außen über die Klassennamen Aussen.Innen ansprechbar. Außer beim Namen besitzt diese Klassengattung keine echte Schachtelung. Eine statisch geschachtelte Schnittstelle darf eine Klasse enthalten, welche (implizit) statisch ist und daher eine Top-Level Klasse ist. G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 11 / 11