Innere Klassen. Innere Klassen. Page 1. Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen.

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

Programmieren 2 Java Überblick

Innere Klassen in Java

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

ADT: Verkettete Listen

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

12 Abstrakte Klassen, finale Klassen und Interfaces

ALP II Dynamische Datenmengen

Informatik II Übung 5

Informatik II Übung 06. Benjamin Hepp 5 April 2017

ALP II Dynamische Datenmengen Datenabstraktion

Einstieg in die Informatik mit Java

Java Einführung Collections

II.4.5 Generische Datentypen - 1 -

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

Programmieren in Java

class ListElement { int value; ListElement next; ListElement() { next=null; value=0;

Java Einführung Klassendefinitionen

1 of :17:14

3. Übungsbesprechung Programmkonstruktion

Programmierkurs Java

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

Algorithmen und Datenstrukturen

Info B VL 11: Innere Klassen/Collections

Kapitel 9. Inner Classes. 9.1 Wiederholung: Iteratoren. Ausführen einer Operation auf allen Elementen einer Containerklasse

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

Implementieren von Klassen

Geschachtelte Klassen

Info B VL 14: Java Collections/Reflections

14 Abstrakte Klassen, finale Klassen, Interfaces

Einstieg in die Informatik mit Java

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

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

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

Algorithmen und Datenstrukturen

II.4.2 Abstrakte Klassen und Interfaces - 1 -

Objektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein

Programmieren in Java -Eingangstest-

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

Arten von Klassen-Beziehungen

Objektorientierte Programmierung. Kapitel 14: Interfaces

II.4.4 Exceptions - 1 -

Programmieren 2 Übung Semesterwoche 2

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

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

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Wiederholung aus SWE2

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Objektorientierte Programmierung. Kapitel 12: Interfaces

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Javakurs für Anfänger

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

::Zweck. Sicherstellung, dass nur eine Instanz einer bestimmten Klasse existiert

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

1 Abstrakte Klassen, finale Klassen und Interfaces

Programmieren I. Kapitel 13. Listen

Javakurs für Anfänger

Klausur: Java (Liste P)

Schnittstellen, Stack und Queue

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

Javakurs 2013 Objektorientierung

Schein-/Bachelorklausur Teil 2 am Zulassung: Mindestens 14 Punkte in Teilklausur 1 und 50% der Übungspunkte aus dem 2. Übungsblock.

Objektorientierte Programmierung Studiengang Medieninformatik

Verkettete Datenstrukturen: Listen

Repetitorium Informatik (Java)

Kapitel 8. Generische Klassen

1 Klassen und Objekte

Aufgaben NF 11; Seite 1

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Punkte. Teil 1. Teil 2. Summe. 1. Zeigen Sie, dass der untenstehende Suchbaum die AVL-Bedingung verletzt und überführen Sie ihn in einen AVL-Baum.

Prinzip des Exception Handling

Gebundene Typparameter

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

Modularisierung in Java: Pakete Software Entwicklung 1

1 Polymorphie (Vielgestaltigkeit)

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Informatik II Übung, Woche 14

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe.

12. Dynamische Datenstrukturen

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Java Einführung Abstrakte Klassen und Interfaces

Programmieren 2 16 Java Collections und Generizität

Programmieren 2 Java Überblick

Einstieg in die Informatik mit Java

Allgemeines - Prinzipien

Einfache Liste: Ein Stapel (Stack) Ansatz. Schaubild. Vorlesung 1. Handout S. 2. Die einfachste Form einer Liste ist ein Stapel (stack).

Programmiermethodik 1. Klausur

Info B VL 8: Abstrakte Klassen & Interfaces

Praktische Softwaretechnologie Vorlesung 3

13. Dynamische Datenstrukturen

Objektorientierte Programmierung

3. Übungsbesprechung Programmkonstruktion

Hochschule Augsburg, Fakultät für Informatik Name:... Prüfung "Programmieren 1", IN1bac, WS 10/11 Seite 1 von 6

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C

Transkript:

Innere Klassen Innere Klassen Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen. Literatur: Java Tutorial & Arnold, K., Gosling, J. und Holmes,D... Page 1

Innere Klassen Der erste Eindruck in Java: alle Klassen sind "top level", gewöhnlich Eine pro Datei Klassen können jedoch innerhalb anderer Klassen deklariert werden. Warum: meist wenn eine Klasse nur innerhalb einer Anderen benötigt wird. Beispiel: verkettete Liste doppelt verkettete Liste: zwei Klassen ListenKnoten : enthält Daten und Pointer zum nächsten und vorherigen Knoten VerketteteListe : Pointer zu Kopf und Ende der Liste ListenKnoten ist Hilfsklasse und wird nur von VerketteteListe genutzt. VerketteteListe ListenKnoten Listenknoten ListenKnoten ListenKnoten Kopf 1 2 3 4 Ende Page 2

Innere Klasse public class LinkedList {... // inner class private class ListCell { int value; ListCell next; ListCell previous; // end ListCell private ListCell head; private ListCell tail;... // end LinkedList LinkedList Methoden können ListCell Objekte erzeugen und nutzen. Nutzer von ausserhalb der LinkedList können die ListCell Klasse nicht sehen Implementierungs Detail Innere Klasse kennt äussere Variablen public class OuterClassDemo { private int a; public InnerClass subobject; public class InnerClass { public int b; public int sum() { return a + b; // end sum // end class InnerClass // constructor Innere Klasse hat Referenz auf das a der äusseren Klasse. public OuterClassDemo( int aval, int bval) { a = aval; subobject = new InnerClass(); subobject. b = bval; // end constructor public static void main( String args[]) { OuterClassDemo tester = new OuterClassDemo( 7, 5); tester. a = 4; tester. subobject. b = 3; // end main // end class OuterclassDemo Page 3

Grenzen der Inneren Klassen public class OuterClass {... public InnerClass subobject; public class InnerClass { public int b;... // end class InnerClass // end class OuterClass Ein äusserer Nutzer kann ein inneres Objekt referenzieren. OuterClass x = new OuterClass(); int y = x.subobject.b; Ein äusserer Nutzer kann KEINE Instanz eines inneren Objekts erzeugen. InnerClass y = new OuterClass.InnerClass(); // illegal Objekte 'Innerer Klassen' können nur innerhalb der äusseren Klasse existieren. Implementierungsdetails Unsere geistige Vorstellung von den Objekten: a: 13 subobject b: 7 Wie es in Java implementiert ist: a: 13 subobject b: 7 pointer vom inneren Objekt zum äusseren Objekt Page 4

Statische geschachtelte Klassen public class OuterClass { statische geschachtelte Klassen verhalten sich wie private int a; externe isolierte Klassen. public InnerClass subobject; public static class InnerClass { Nur der Zugriff erfolgt über OuterName.innerName public int b; public int sum() { Referenz zu `Member`-Variablen der return a + b; äusseren Klasse ist unzulässig. // end sum // end class InnerClass... Pointer vom `inneren Objekt zum äusseren Objekt existiert nicht! public static void main( String args[]) { OuterClass tester = new OuterClass( 7, 5); tester. a = 4; tester. subobject. b = 3; // end main Wozu statische geschachtelte Klassen? Eine Klasse innerhalb der anderen zu definieren spiegelt ihre Beziehung wieder. Wird oft bei Exceptions verwendet. public class MyClass { // data and methods for MyClass // MyClass may raise exceptions public static class MyException {.. // end MyClass MyException-Object muss nicht unbedingt Teil von MyClass sein, es könnte auch durch eine Methode in MyClass erzeugt werden. Page 5

Anonyme Klassen: Motivation Angenommen wir wünschen eine kleine Veränderung einer Klasse. Beispiel: ein Stack der automatisch `Debug -Information ausgibt. 1. Lösung: erweitere eine Stackimplementierung. class DebugStack extends SuperStack { public void push(int i) { super.push(i); System.out.println("just put " + i); public int pop() { int result = super.pop(); System.out.println("just got" + result); return result; Anonyme Klassen Was aber wenn wir nur eine einzige Instanz des Objekts benötigen. Dann kann eine Anonyme Klasse verwendet werden. Stack mystack = new Stack { public void push(int i) { super.push(i); System.out.println("just put " + i); public int pop() { int result = super.pop(); System.out.println("just got " + result); return result; ; Anonyme Klassen sind nur nützlich wenn es darum geht Methoden zu erweitern und nicht um Neue zu schaffen. Page 6

Anonyme Klassen & Interfaces Anonyme Klassen können verwendet werden, wenn Objekte erzeugt werden sollen, die ein Interface implementieren. Stack mystack = new Stack() { public void push(int i) {... public int pop() {... boolean isempty() {... ; Page 7