8. Kapitel INNERE KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Größe: px
Ab Seite anzeigen:

Download "8. Kapitel INNERE KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm"

Transkript

1 8. Kapitel INNERE KLASSEN Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

2 Übersicht 1 1. Programmstrukturierung mit Paketen (packages) 2. Vererbung 3. Abstrakte Klassen und Interfaces 4. Ausnahmebehandlung 5. Datenströme: die Java IO- Bibliothek 6. MulRthreading 7. CollecRons 8. Innere Klassen 9. Generics 10. ReflecRon

3 Lernziele des Kapitels 2 Verstehen wozu man innere Klassen braucht. Kennenlernen des Konzepts innerer Klassen. Verstehen, wie innere Klassen realisiert sind. Kennenlernen verschiedener Arten innerer Klassen. Innere Klassen anwenden können. Erweiterung äußerer Klassen durch innere Klassen verstehen.

4 Inhalt 3 o Einführung, MoRvaRon o StaRsche innere Klassen o Elementklassen o Lokale Klassen o Anonyme innere Klassen

5 Innere Klassen Wozu? 4 o Zunächst (bis JDK 1.0): Klassen nur auf Paketebene definiert, Schachtelung war nicht möglich. + Struktur der Klassen innerhalb eines Pakets: flach und übersichtlich. - Unhandlich, wenn eine Klasse nur lokale Bedeutung hat oder wenn "auf die Schnelle eine kleine Klasse" gebraucht wird. - In Java gibt es keine FunkRonszeiger è Austausch kleiner Codebestandteile zwischen verschiedenen Programmteilen, nur über DeklaraRon eines Interface (die benörgte FunkRonalität wird in einer implemenrerenden Klasse zur Verfügung gestellt). - Für die Programmierung grafischer Oberflächen: Wunsch nach einem flexibleren Mechanismus z.b. um einen Event- Handler zu schreiben. - Verknüpfung einer AkRon mit einem Oberflächenelement (z. B. Bukon) à AkRon = Methode. - Aber: man kann (konnte) in Java kein Methoden übergeben à Umweg: es muss extra eine Klasse erzeugt werden, um dann die Methode nach Erzeugen eines Objektes aufzurufen. Die Lösung für diese Probleme wurde mit der Einführung von lokalen und anonymen Klassen geschaffen. o Mit Java 8 gibt es eine weitere Vereinfachung: durch sog. Lambda- Ausdrücke kann man Methoden noch einfacher als eigenständige Elemente handhaben und als Parameter an andere Methoden übergeben.

6 Java- Klassen: KlassifikaRon 5 Klassen Toplevel-Klassen Geschachtelte Klassen Statische Member-Klassen Innere Klassen Lokale Klassen Anonyme Klassen Element-Klassen

7 Geschachtelte Klassen: Eigenschaoen 1/2 6 o Geschachtelte Klassen können auf private Eigenschaoen der umgebenden Klasse zugreifen. o Alle (auch private-) Bestandteile, die eine Klasse definiert, sind in allen geschachtelten Klassen verfügbar in beiden Richtungen. o Name einer geschachtelte Klasse Namen einer der umschließenden Klassen. o Schachtelungs- Hierarchie Vererbungsstammbaum à Schachtelung hat nichts mit Vererbung zu tun. o Geschachtelte Klassen erben ganz normal; insbesondere kann eine geschachtelte Klasse eine umgebende Klasse erweitern.

8 Geschachtelte Klassen: Eigenschaoen 2/2 7 o SchachtelungsRefe beliebig. o In einer Klasse können beliebig viele Klassen eingeschachtelt werden. o Eingeschachtelt werden können auch: Abstrakte Klassen, Interfaces, EnumeraRonen. o Sichtbarkeit von geschachtelten Klassen: jede, d.h. public, protected, private, package(- private)

9 9 StaRsche geschachtelte Klassen Nested Top- Level Classes 1/3 o Einfachste Variante einer inneren Klasse/Schnikstelle. o Die Klassen bilden quasi ein Unterpaket mit eigenem Namensraum (Name der Klasse ist Outer.Inner stak nur Inner). o Geschachtelte Top- Level- Klassen oder - Interfaces sind direkt für andere Klassen verfügbar. o Klassen können das Gleiche wie Top- Level- Klassen oder Schnikstellen und verhalten sich wie Top- Level- Klasse: Zur Erzeugung von Exemplaren von inneren Klassen sind keine Objekte der äußeren Klasse nörg. Aus technischer Sicht: geschachtelte Top- Level- Klassen = völlig eigenständige Klassen.

10 10 StaRsche geschachtelte Klassen Nested Top- Level Classes 2/3 o Einbekung in eine andere Klasse: hauptsächlich aus Design- Gründen, um eine enge AssoziaRon der geschachtelten Top- Level- Klasse mit der umschließenden Klasse zum Ausdruck zu bringen. o Dürfen nicht innerhalb von Blöcken definiert werden. o Top- Level- Klassen, die in derselben Schachtelung stehen, dürfen gegenseirg auf ihre private- Bestandteile zugreifen. o Können auch innerhalb von Interfaces vereinbart werden.

11 11 StaRsche geschachtelte Klassen Nested Top- Level Classes 3/3 o Können starsche Variablen und starsche Methoden enthalten. o Können Instanzvariablen und Instanz- Methoden enthalten. o Zugriff auf starsche Variablen/Methoden der äußeren Klasse. o Kein Zugriff auf Instanzvariablen und Instanz- Methoden der äußeren Klasse (wie bei starschen Methoden). o Objekte können einfach erzeugt werden: Outer.Inner obj = new Outer.Inner ();!

12 StaRsche geschachtelte Klassen Beispiel 12 class Outer { static class Inner { private static void print (String s) { if (s!= "") System.out.println(s + " " + Inner.class.getName() ); else System.out.println("InnerClass "+ Inner.class.getName()); // ~Inner static class Inner2 { public void print () { Outer.Inner.print("InnerClass2 " + Inner2.class.getName()); // ~Inner2 // ~Outer public class TopLevelClass { public static void main(string[] args) { Outer.Inner io = new Outer.Inner (); Outer.Inner2 io2 = new Outer.Inner2(); Outer.Inner.print(""); // <<< Zugriff von außen nicht erlaubt io2.print();

13 (Echte) Innere Klassen 13 o Es gibt drei Arten von den inneren Klassen : o Elementklassen, die als nicht- starc- Bestandteile einer anderen Klasse vereinbart sind. o Lokale Klassen, die innerhalb einer Methode oder eines Blocks definiert sind. o Anonyme Klassen, die ein Spezialfall der lokalen Klassen sind. Eine anonyme Klasse hat keinen Namen und wird dann benutzt, wenn ein kleines»einmal«- Objekt in einem Ausdruck benörgt wird.

14 Innere Klassen - Eigenschaoen 14 o Dürfen keine starschen Variablen oder Methoden enthalten. o Ausnahme: starc final Akribute (Konstanten). o Haben eine implizite Referenz auf ein Objekt der umgebenden Klasse (Details folgen).

15 Elementklasse: Eigenschaoen 15 o DeklaraRon einer (nicht starschen) Klasse innerhalb einer Klasse aber außerhalb einer Methode. o Name ist in der ganzen Klasse und abhängig von der Sichtbarkeit auch außerhalb sichtbar. o Kann nur im Kontext eines Objekts der äußeren Klasse exisreren Outer.Inner obj = outerobj.new Inner(); o Zugriff auf alle Member und Methoden (auch starsche) der äußeren Klasse und umgekehrt. o Der Zugriff auf die this-referenz der äußeren Klasse erfolgt über die besondere Form Outer.this stak nur einfach this.

16 Elementklasse Beispiel 1 16 class Outer { public String name; public int number; public void createandprintinner(string iname) { Inner inner = new Inner(); inner.name = iname; System.out.println(inner.getQualifiedName()); public class InnerOuter { public static void main(string[] args) { Outer outer = new Outer(); outer.name = "Outer"; outer.number = 77; outer.createandprintinner("inner"); class Inner { // innere Klasse private String name; private String getqualifiedname() { return number + ":" + Outer.this.name + "." + name; // ~inner // ~outer Ausgabe: 77:Outer.Inner

17 17 public class Parcel1 { class Contents { // innere Klasse Elementklasse Beispiel 2 private int i = 11; public int value() { return i; class Destination { // innere Klasse private String label; Destination(String whereto) { label = whereto; String readlabel() { return label; // Using inner classes looks just like using any other class, within Parcel1: public void ship(string dest) { Contents c = new Contents(); // erzeugen eines Objekts der inneren Klasse Destination d = new Destination(dest); System.out.println(d.readLabel()); // dto. public static void main(string[] args) { Parcel1 p = new Parcel1(); p.ship("tanzania"); Ausgabe: Tanzania

18 Elementklasse Beispiel 3 18 public class Parcel2 { class Contents { private int i = 11; public int value() { return i; //~Contents class Destination { private String label; Destination(String whereto) { label = whereto; String readlabel() { return label; //~Destination public Destination to(string s) { return new Destination(s); public Contents cont() { return new Contents(); public void ship(string dest) { Contents c = cont(); Destination d = to(dest); System.out.println(d.readLabel()); public static void main(string[] args) { Parcel2 p = new Parcel2(); p.ship("tanzania"); Parcel2 q = new Parcel2(); // Defining references to inner classes: Parcel2.Contents c = q.cont(); Parcel2.Destination d = q.to("borneo"); //~Parcel2 Ausgabe: Tanzania

19 Elementklasse Beispiel für Referenz auf die äußere Klasse 19 interface Selector { boolean end(); Object current(); void next(); public class Sequence { private Object [] items; private int next = 0; public Sequence(int size) { items = new Object [size]; public void add(object x) { if (next < items.length) items [next++] = x; private class SequenceSelector implements Selector { private int i = 0; public boolean end() { return i == items.length; public Object current() { return items [i]; public void next() { if (i < items.length) i++; // ~ SequenceSelector public Selector selector () { return new SequenceSelector(); // ~ Sequence public static void main(string[] args) { Sequence sequence = new Sequence (10); for (int i = 0; i < 10; i++) sequence.add(i); Selector selector = sequence.selector(); while (!selector.end()) { System.out.print (selector.current() + " "); selector.next();

20 Zugriff von außen auf Elementklassen 20 o Ein Objekt einer inneren Klasse kann nur im Zusammenhang mit einem Objekt der äußeren Klasse erzeugt werden: Zuerst wird das äußere Objekt erzeugt, dann das innere. o Man kann von außerhalb auf ein exisrerendes Objekt der inneren Klasse zugreifen, wenn es über die äußere Klasse zugänglich gemacht wurde (z.b. die innere Klasse ist als public qualifiziert). Der Zugriff auf Datenelemente und Methoden unterliegt denselben Beschränkungen wie bei den äußeren Klassen. Hinweis (s. auch nächste Folie): Klassen sind nicht wirklich geschachtelt.

21 Realisierung von Elementklassen 21 o Innere Klassen gibt es nur zum Compilezeitpunkt. o Innere Klassen werden zur Laufzeit behandelt wie normale Klassen. o Zur Laufzeit (d.h. für die JVM) exisreren keine inneren Klassen. o Der Compiler wandelt alle inneren Klassen mit einem in der SpezifikaRon festgelegten Verfahren in Top- Level- Klassen um: Der Compiler erzeugt zu jeder lokalen Klasse eine eigene.class- Datei. Der Name der Klassendatei einer geschachtelten Klasse ergibt sich aus der Verkekung ihres Namens mit den Namen der umschließenden Klassen, die jeweils mit einem Dollarzeichen ($) voneinander getrennt sind. Bei anonymen Klassen (s. u.) wird stak des Namens der inneren Klasse eine vom Compiler vergebene fortlaufende Nummer verwendet (z.b. Outer$1.class). Durch die Generierung neuer Klassen ergibt sich die Notwendigkeit für: n synthersche Zugriffsmethoden, n synthersche Felder für die this- Referenzen, n spezielle Konstruktoren.

22 .class- Dateien: Beispiel 22 class Outer {... class Inner { // innere Klasse class InnerInner { // innere innere Klasse... // -InnerInner... // -Inner // -Outer public class InnerOuter {... Vom Compiler erzeugte Klassendateien: o Outer.class, o Outer$Inner.class, o Outer$Inner$InnerInner.class, o InnerOuter.class

23 Zugriff von innen nach außen 23 public class Outer { String s = "kringelich"; class Inner{ void standard() { System.out.println (s); Vom Compiler generierte Klassendatei: class Outer$Inner { private Outer this$0; //... Kopie der Referenz auf Outer.this. Die Konstruktoren der inneren Klasse erhalten einen zusätzlichen Parameter vom Typ Outer, mit dem die this$0-variable initialisiert wird.

24 24 Beziehung zwischen äußerer und innerer Klasse

25 Beziehung zwischen äußerer und innerer Klasse 25 Heap Stack Inner dosomething i 5 this Outer.this testinner main inner this outer 5 6 Outer i j Zustand am Ende von dosomething

26 Elementklassen Zugriffe auf Membervariablen 26 o Zugriff auf Membervariablen (aus der inneren Klasse heraus) auf unterschiedliche Arten: Bei der Verwendung von unqualifizierten Namen (also solchen ohne Klassennamen- Präfix) Anwendung lexikalischer Sichtbarkeitsregeln. Gibt es eine lokale Variable dieses Namens? n Ja, dann ist es diese. n Nein, dann suche nach einer gleichnamige Membervariable in der aktuellen Klasse. Ist auch diese nicht vorhanden, erweitere die Suche sukzessive von innen nach außen auf alle umschließenden Klassen. Wird die Membervariable einer äußeren Klasse durch eine gleichnamige Membervariable der inneren Klasse verdeckt, kann über den qualifizierten Zugriff mit dem Präfix Klassenname.this auf die äußere Variable zugegriffen werden. Bei Mehrfachschachtelung werden die Klassennamen auf dem Pfad zur inneren Klasse alle durch Punkt getrennt angegeben.

27 Zugriff auf äußere Klasse mit.this - Beispiel 27 public class DotThis { void f() {System.out.println("DotThis.f()"); public class Inner { public DotThis outer() { return DotThis.this; // äußeres Objekt public Inner inner() { return new Inner(); public static void main(string[] args) { DotThis dt = new DotThis(); DotThis.Inner dti = dt.inner(); // inneres Objekt von dt besorgen dti.outer().f(); // dt.outer() liefert Referenz auf das äußere Objekt

28 Zugriff auf innere Klasse mit.new - Beispiel 28 public class DotNew { public class Inner { public static void main(string[] args) { DotNew dn = new DotNew(); DotNew.Inner dtn = dn.new Inner(); // liefert gleichzeitig (implizit) eine Referenz auf das äußere Objekt

29 Innere Klassen und Vererbung 29 o Innere Klassen können von der umgebenden Klasse erben. o Methoden und Akribute sind dann auf zwei Wegen sichtbar: Als Member der äußeren Klassen. Als geerbte Akribute und Methoden. o Die eigentlich getrennten Namensräume fallen zusammen o Bei unqualifiziertem Zugriff haben die ererbten Akribute Vorrang vor den über die äußere Klasse sichtbaren. o Diese KonstrukRon sollte vermieden werden, da sie sehr verwirrend und schwer zu lesen ist.

30 Elementklasse als Unterklasse der äußeren Klasse 30 o Wenn wir ein qualifiziertes this verwenden, dann bezeichnet C.this die äußere Klasse, also das umschließende Exemplar. o Gilt jedoch die Beziehung C1.C2.... Ci.... Cn., haben wir mit Ci.this ein Problem, wenn Ci eine Oberklasse von Cn ist. o Eine textuell umgebende Klasse ist zugleich auch Oberklasse. o Problem - hier werden zweidimensionale Namensräume hierarchisch kombiniert: Die eine Dimension sind die Bezeichner beziehungsweise Methoden aus den lexikalisch umgebenden Klassen. Die andere Dimension sind die ererbten Eigenschaoen aus der Oberklasse. Hier sind beliebige Überlappungen und MehrdeuRgkeiten denkbar.

31 31 Elementklasse, welche von der äußeren Klasse erbt - Beispiel class Schuh { void wasbinich() { System.out.println( "Ich bin der Schuh des Manitu" ); class Fuss extends Schuh { void spannung1() { Schuh.this.wasBinIch(); void spannung2() { ((Schuh)this).wasBinIch(); void wasbinich() { System.out.println( "Ich bin ein Schuh.Fuss" ); public static void manitu() { new Schuh().new Fuss().spannung1(); new Schuh().new Fuss().spannung2(); Schuh so = new Schuh().new Fuss(); so.wasbinich(); public class InnerOuter { public static void main(string[] args) { Schuh.manitu();

32 Lokale Klassen - Eigenschaoen 1/2 32 o Klassen, die innerhalb einer Methode oder eines beliebigen Blocks definiert werden à lokale Klassen. o Zugriff nur auf besrmmte lokale Variablen (auch Parameter) der umgebenden Methode oder des umgebenden Blocks: à auf alle mit final vereinbarten Konstanten. o Lokalen Klassen sind nur in dem Block sichtbar, in dem sie definiert sind. Instanzen der lokalen Klasse können nur innerhalb der Methode bzw. des Blocks, in welchen sie deklariert sind, angelegt werden. o Unterschied zu primirven lokalen Variablen: Exemplare lokaler Klassen überleben das Ende der Methode / des Blocks.

33 Lokale Klassen Eigenschaoen 2/2 33 o Dürfen keine starschen Variablen oder Methoden enthalten. o Lokale Klassen dürfen nicht überdeckt werden, d.h. in den umschließenden Namensräumen darf es keine andere Variable (Klasse) mit demselben Namen geben. o Lokale Klassen werden in der Praxis meist in der Form sog. anonymer Klassen verwendet. o Modifizierer für lokale Klassen sind nicht erlaubt (nur abstract oder final).

34 2 Gründe für lokale Klassen 35 o Wenn man ein Interface implemenrert, kann man eine Referenz auf ein (inneres Klassen- ) Objekt erzeugen und zurückgeben. o Wenn man zur Lösung einer schwierigen Aufgabe eine Hilfsklasse benörgt, die nicht öffentlich zugänglich sein soll.

35 Lokale Klassen Beispiel 1 36 //Parcel4.java //Lokale Klasse in einer Methode public interface Destination { String readlabel(); public class Parcel4 { public Destination dest(string s) { class PDestination implements Destination { private String label; private PDestination(String whereto) { label = whereto; public String readlabel() { return label; return new PDestination(s); public static void main(string[] args) { Parcel4 p = new Parcel4(); Destination d = p.dest("tansania");

36 Lokale Klassen Beispiel 2 37 //Parcel5.java //Lokale Klasse innerhalb eines Blocks. public class Parcel5 { private void internaltracking(boolean b) { if(b) { class TrackingSlip { private String id; TrackingSlip(String s) { id = s; String getslip() { return id; TrackingSlip ts = new TrackingSlip("slip"); String s = ts.getslip(); // Zugriff außerhalb des Scopes verboten: //! TrackingSlip ts = new TrackingSlip("x"); public void track() { internaltracking(true); public static void main(string[] args) { Parcel5 p = new Parcel5(); p.track();

37 Anonyme Klassen - Eigenschaoen 38 o o o o o o o o Häufigste Anwendung lokaler Klassen: anonyme DefiniRon. Klasse erhält keinen eigenen Namen, DefiniRon und Instanzierung erfolgen in einer kombinierten Anweisung im Argument einer new- Anweisung ( Erweiterung der Syntax der new- Anweisung). Anonyme Klassen werden in einem Ausdruck definiert, alle anderen Klassen in einer Anweisung. Eine anonyme Klasse ist eine Einwegklasse, die nur einmal instanziert werden kann. Anonyme Klassen können keine Konstruktoren definieren, denn die müssen ja benannt sein. Mit Instanz IniRalisierer kann man Konstruktor- Effekte erzielen. Anonyme Klassen werden normalerweise aus anderen Klassen abgeleitet oder erweitern exisrerende Interfaces. Ihre wichrgste Anwendung finden sie bei der DefiniRon von Listenern für graphische Oberflächen.

38 Anonyme Klassen - Ausprägungen 39 Allgemeine NotaOon: new KlasseOderSchnittstelle () { /* Eigenschaften der inneren Klasse */ o Wenn hinter new der Klassenname A steht, dann ist die anonyme Klasse eine Unterklasse von A. o Wenn hinter new der Name einer Schnikstelle S steht, dann erbt die anonyme Klasse von Object und implemenrert die Schnikstelle S. ImplemenRert sie nicht die OperaRonen der Schnikstelle, haben wir nichts davon, denn dann häken wir eine abstrakte innere Klasse, von der kein Objekt erzeugt werden könnte. o Einschränkung: es sind keine zusätzlichen extends- oder implements- Angaben möglich.

39 Anonyme Klassen Beispiel 1 40 // Methode, die eine anonyme innere Klasse zurück gibt. public class Parcel6 { public Contents cont() { return new Contents() { private int i = 11; public int value() { return i; ; // zu beachten: das Semikolon ist notwendig public static void main(string[] args) { Parcel6 p = new Parcel6(); Contents c = p.cont(); Anonyme Klasse implementiert das Interface Contents public interface Contents { int value(); Die Methode cont kombiniert das Erzeugen eines Ergebnisses mit der Definition der Klasse, die den Ergebniswert repräsentiert.

40 Beispiel 1 ohne anonyme Klassen 41 // Version des letzten Beispiels // mit normalen inneren Klassen public interface Contents { int value(); public class Parcel61 { class MyContents implements Contents { private int i = 11; public int value() { return i; public Contents contents () { return new MyContents(); public static void main(string[] args) { Parcel61 p = new Parcel61(); Contents c = p.contents ();

41 42 Anonyme Klassen, deren Basisklassen- Konstruktor einen Parameter haben Beispiel 2 //Anonyme innere Klasse, die den Basisklassenkonstruktor aufruft. class Wrapping { private int i; public Wrapping (int x) { i = x; public int value () { return i; public class Parcel7 { public Wrapping wrap (int x) { // Aufruf des Konstruktors der Basisklasse return new Wrapping(x) { // Argumentübergabe an Konstruktor public int value() { return super.value() * 47; ; // Erinnerung: das Semikolon ist erforderlich! public static void main(string[] args) { Parcel7 p = new Parcel7(); Wrapping w = p.wrap(10); Konstruktor für eine anonyme innere Klasse Beispiel 2

42 43 Konstruktor für eine anonyme innere Klasse Beispiel 3 // Creating a constructor for an anonymous inner class. abstract class Base { public Base(int i) { System.out.println("Base constructor, i = " + i); public abstract void f(); Ausgabe: Base constructor, i = 47 public class AnonymousConstructor { Inside instance initializer public static Base getbase(int i) { In anonymous f() return new Base(i) { { System.out.println("Inside instance initializer"); public void f() { System.out.println("In anonymous f()"); ; public static void main(string[] args) { Base base = getbase(47); base.f();

43 Anonyme Klassen Beispiel 4 44 savebutton = new Button("Speichern"); savebutton.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { // Button deaktivieren und Text speichern savebutton.setenabled(false); savetext(); );... TextArea textarea = new TextArea(); textarea.addtextlistener(new TextListener () { public void textvaluechanged(textevent e) { // Bei Änderung des Textes Button aktivieren savebutton.setenabled(true); ); Anonyme Klasse implementiert ein Interface ActionListener Anonyme Klasse implementiert ein Interface TextListener

44 Anonyme Klassen Beispiel 5 45 // Aufruf eines Konstruktors mit Parameter bluebutton = new JButton("OK") { // Exemplar-Initialisierung { setbackground(color.blue); // abschließendes Semikolon! ; Anonyme Klasse ist Unterklasse von JButton Da sofort eine Unterklasse von JBukon definiert wird, fehlt der Name der inneren Klasse. Das einzige Exemplar dieser anonymen Klasse lässt sich über die Variable bluebukon weiterverwenden.

45 46 Anonyme Klassen - Quiz

46 Ablauf der Objekt- Erzeugung Speicherbereich belegen, welcher das neue Exemplar aufnimmt. Bei diesem Schrik werden auch die Datenelemente mit den IniRalwerten der jeweiligen Datentypen belegt. 2. Ausführung der Konstruktoren aller Oberklassen entlang der Vererbungshierarchie nach oben. Falls ein Konstruktor hierbei nicht explizit einen Konstruktor der Oberklasse mit super aufruo, wird der parameterlose Konstruktor der Oberklasse verwendet. 3. Belegung der Datenelemente, die in der DeklaraRon eine Zuweisung enthalten, mit den entsprechenden Werten. 4. Ausführung der Exemplar- IniRalisierungsteile in der Reihenfolge ihrer DeklaraRon, sofern es welche gibt. 5. Ausführung des Codes des aufgerufenen Konstruktors.

47 IniRalisierungsreihenfolge 48 class Tag { Tag(int marker) { System.out.println("Tag(" + marker + ")"); class Card { Tag t1 = new Tag(1); // vor dem Konstruktor Card() { // im Konstruktor: System.out.println("Card()"); t3 = new Tag(33); // Reinitialize t3 Tag t2 = new Tag(2); // nach dem Konstruktor void f() { System.out.println("f()"); Tag t3 = new Tag(3); // am Ende Ausgabe: Tag(1) Tag(2) Tag(3) Card() Tag(33) f() public class OrderOfInitialisation { public static void main(string[] args) { Card t = new Card(); t.f(); // Objekt erzeugt

48 Instanz- IniRalisierung 49 class Mug { Mug(int marker) { System.out.println("Mug(" + marker + ")"); void f(int marker) { System.out.println("f(" + marker + ")"); public class Mugs { Mug c1; Mug c2; { c1 = new Mug(1); c2 = new Mug(2); System.out.println("c1 & c2 initialized"); Mugs() { System.out.println("Mugs()"); Ausgabe: Inside main() Mug(1) Mug(2) c1 & c2 initialized Mugs() public static void main(string[] args) { System.out.println("Inside main()"); Mugs x = new Mugs(); è Programmbeispiel

49 Sichselbst- ImplemenRerung mikels innerer Klassen 50 o In einem Interface kann man das Interface mikels einer inneren Klasse (selbst) implemenreren. o Wird i.d.r. dazu eingesetzt, um bei verschiedenen Interface- ImplemenRerungen denselben Code zu haben.

50 51 Interface- ImplemenRerung mikels innerer Klassen - Beispiel public interface ClassInInterface { void doesitwork (); class IFImplementation implements ClassInInterface { public void doesitwork () { System.out.println("Yes, it does!"); public static void main (String[] args) { new IFImplementation().doesItWork(); Lokale Klasse implementiert das Interface ClassInInterface Es ist gebräuchlich eine Klasse in ein Interface zu schachteln, wenn man gemeinsamen Code haben möchte, der mit allen unterschiedlichen Implementierungen dieses Interface benutzt wird. è Beispielprogramm

51 Nachbildung von FunkRonszeigern - Beispiel 52 class MathExp implements DoubleMethod { public double compute(double value) {return Math.exp(value); public interface DoubleMethod { class MathSqrt implements DoubleMethod {... public double compute (double value); class Times2 implements DoubleMethod {... class Sqr implements DoubleMethod {... public class FctPointers { public static void printtable(doublemethod meth) { System.out.println("Wertetabelle " + meth.tostring()); for (double x = 0.0; x <= 5.0; x += 1) { System.out.println(" " + x + "->" + meth.compute(x)); public static void main(string[] args) { printtable(new MathExp()); printtable(new Times2()); Dem Interface-Parameter können Objekte aller Klassen zugewiesen werden, die das Interface implementieren.

52 53 FunkRonszeiger reloaded - mit anonymen Klassen public interface DoubleMethod { public double compute (double value); public class FctPointers { public static void printtable(doublemethod meth) { System.out.println("Wertetabelle " + meth.tostring()); for (double x = 0.0; x <= 5.0; x += 1) { System.out.println(" " + x + "->" + meth.compute(x)); public static void main(string[] args) { printtable(new DoubleMethod (){ public double compute(double value) {return Math.exp(value);); printtable(new DoubleMethod (){ public double compute (double val) {return 2*val;); Eleganter (direkter) mit anonymen Klassen: Erzeugung und Aufruf an einer Stelle.

53 54 Anonyme Klassen zur ImplemenRerung eines Interface interface DoubleMethod { public double compute(double value); public class FctPointers { public static void printtable(doublemethod meth) { System.out.println("Wertetabelle " + meth.tostring()); for (double x = 0.0; x <= 5.0; x += 1) { System.out.println(" " + x + "->" + meth.compute(x)); public static void main(string[] args) {... printtable ( );... new DoubleMethod() { // anonym class public double compute(double value) { return Math.sqrt(value); Eleganter (direkter) mit anonymen Klassen: Erzeugung und Aufruf an einer Stelle. Anonyme Klasse implementiert das Interface DoubleMethod è Programmbeispiel

54 55 Einsatzmöglichkeit für innere Klassen Testumgebung für eine Klasse public class TestBed { public void f () { System.out.println("f()"); public static class Tester { public static void main (String [] args) { TestBed t = new TestBed(); t.f(); Die innere Klasse ist zu Testzwecken vorhanden. Nach dem Test kann diese innere Klasse problemlos gelöscht werden.

55 Zugriff in/aus inneren Klassen 56 class MNA { private void f() {System.out.println("f() in MNA"); class A { private void g() {System.out.println("g() in MNA.A"); public class B { void h() { g(); f(); public class MultiNestingAccess { public static void main (String[] args) { MNA mna = new MNA(); MNA.A mnaa = mna.new A(); MNA.A.B mnaab = mnaa.new B(); mnaab.h();

56 Innere Klassen Wozu? 57 o Typische KonstellaRon: è Eine innere Klasse erbt von einer Klasse oder sie implemenrert ein Interface. Der Code der inneren Klasse bearbeitet das äußere Klassenobjekt, innerhalb dessen es erzeugt wurde. Die innere Klasse ist eine Art Fenster in die äußere Klasse. Fragen: 1. Frage: Wenn man nur eine Referenz auf ein Interface braucht, warum soll dann nicht die äußere Klasse dieses Interface implemenreren? Antwort: Wenn die Referenz auf das Interface alles ist, was man braucht, dann sollte man es so implemenreren. 2. Frage: Was ist der Unterschied zwischen einer inneren Klasse, die ein Interface implemenrert und einer äußeren Klasse, welche dasselbe Interface implemenrert? Antwort: Man kann nicht immer die Benutzerfreundlichkeit von Interfaces haben, manchmal arbeitet man mit ImplemenRerungen. Jede innere Klasse kann völlig autonom ein Interface implemenreren. Die innere Klasse ist deshalb unabhängig davon, ob die äußere Klasse auch schon ein Interface implemenrert.

57 Eigenschaoen innerer Klassen 58 o Von inneren Klassen können mehrere Exemplare exisreren. Jedes dieser Exemplare hat seinen eigenen Zustand, der unabhängig vom Zustand des äußeren Exemplars ist. o Ein äußere Klasse kann mehrere innere Klassen haben. ImplemenReren die inneren Klassen ein Interface, kann dies jede innere Klasse auf unterschiedliche Art tun. o Innere Klasse können von verschiedenen Oberklassen, die auch äußere Klassen sein können, erben. o Die Erzeugung eines Exemplar der inneren Klasse ist von der Erzeugung des äußern Exemplars (zeitlich) entkoppelt. o Zwischen innerer und äußerer Klasse gibt es keine (missverständliche) is- a Beziehung. Bei den Exemplaren der inneren Klasse handelt es sich um eigenständige Objekte.

58 Ein Rätsel am Schluss 59 public class Rätsel { int i; public static void main(string[] args) { new RätselXT().print(); class RätselXT extends Rätsel { int i; void print() { this.i = 1; new Rätsel() { { // Beginn des Initialisierungsblocks this.i = 2; System.out.println("" + this.i + ((Rätsel)this).i + RätselXT.this.i ); // Ende des Initialisierungsblocks ; System.out.println("" + this.i + ((Rätsel)this).i + RätselXT.this.i );

59 60 Aufgabe: Machen Sie das RewriRng der inneren Klasse

60 61 RewriRng der äußeren Klasse

61 62 RewriRng der inneren Klasse

62 63 Erlaubte Modifier bei äußeren und inneren Klassen und Interfaces Modifier Äußere Klassen Elementklassen Lokale Klassen Äußere Schnittstellen Innere Schnittstellen public ja ja nein ja ja protected nein ja nein nein ja private nein ja nein nein ja static nein ja nein nein ja final ja ja ja nein nein abstract ja ja ja ja Ja

63 Callbacks - FunkRonszeiger 64 o Innere Klassen erlauben die Übergabe von Methoden an andere Methoden. o Übergabe erfolgt über den Umweg einer Klasse und eines Objektes. o Syntax ist umständlich und verwirrend. o Wieso kann man nicht einfach direkt eine Methode übergeben?

64 Lambdas 65 o Eine anonyme FunkOon oder Lambda- FunkOon ist eine FunkRon in einem Programm, die nicht über ihren Namen, sondern nur über Verweise wie Referenzen oder Zeiger angesprochen werden kann. o Mit dem Konzept anonymer FunkRonen ist es möglich, neben benannten auch unbenannte FunkRonen zu definieren.

65 FuncRonal Interface 66 o Grundlage ist Interface mit einer einzigen abstrakten Methode SAM- Interface(singleabstractmethodinterface) funk@onalesinterface(func@onalinterface) o verhindert Hinzufügen weiterer Methoden. o Compiler setzt Lambda in eine ImplemenRerung des Interfaces public interface Aktion {! public void run(string param);!!

66 Au{au eines Lambdas 67 o Lambda implemenrert die Methode des funkronalen Interface. o Welches Interface implemenrert wird, ergibt sich aus dem Kontext: Typ der Variable, Typ des Parameters. o Au{au des Lambdas Parameter der Methode in Klammern (mit oder ohne Typ), durch Komma getrennt. Bei nur einem Parameter kann die Klammer en allen. Ein Pfeil > Rumpf der Methode. Bei nur einem Statement, kein Block { nörg. o return ist nicht erforderlich, wenn nur ein Ausdruck im Lambda vorkommt.

67 Lambdas - Beispiele 68 o Ohne Typen: (a, b) > a + b o Mit Typen: (int a, int b) > a + b o Mit Block: (a, b) > { int s = a + b; return s; o Ohne Klammer: a > a * a o Mit Klammer: (a) > a * a o Ohne Argumente: () > { System.out.println("Hallo");

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

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm Exkurs: ANONYME KLASSEN Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm Anonyme Klassen Eigenschaften 1 Häufigste Anwendung lokaler Klassen: anonyme Definition. Klasse erhält keinen eigenen

Mehr

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

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

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 16 Einstieg in die Informatik mit Java Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 16 1 Einführung 2 Element-Klassen 3 Lokale Klassen 4 Anonyme Klassen

Mehr

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

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 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

Mehr

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Kapitel 1 Der vierte Tag 1.1 Vererbung Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Sprachen. Unter Vererbung versteht man die Möglichkeit, Eigenschaften vorhandener

Mehr

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

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik Programmieren II Innere Klassen Heusch 10, 13.10 Ratz 5.2.1, 9.8 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Innere Klassen Bisher kennen wir nur Klassen, die entweder zusammen

Mehr

Info B VL 11: Innere Klassen/Collections

Info B VL 11: Innere Klassen/Collections Info B VL 11: Innere Klassen/Collections Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 11: Innere Klassen/Collections

Mehr

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

Deklaration einer Klasse Innere innerhalb Klassen einer in Ja anderen v a Klasse Innere Klassen in Java Java 1.0: nur top-level Klassen Seit Java Version 1.1: Innere Klassen Deklaration einer Klasse innerhalb einer anderen Klasse Illustration Eigenschaften Vorteile Anwendungsmöglichkeiten

Mehr

Programmieren in Java

Programmieren in Java Einführung in die Objektorientierung Teil 4 Interfaces, innere Klassen und Polymorphie 2 Vererbung im Klassendiagram (Wiederholung) Vererbung repräsentiert eine ist ein Beziehung zwischen Klassen Ware

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 03 Vererbung, Polymorphie, Sichtbarkeit, Interfaces Clemens Lang T2 11. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/26 Klassen und Objekte Klassen und Objekte

Mehr

Geschachtelte Klassen

Geschachtelte Klassen Geschachtelte Klassen Die Programmiersprache Java bietet nicht nur die Möglichkeit innerhalb von Klassen Datenfelder und Methoden zu definieren, sondern auch Klassen. Solche Klassen heißen en geschachtelte

Mehr

Geschachtelte Klassen

Geschachtelte Klassen Geschachtelte Klassen Christian Schamott 1 / 26 Übersicht Gemeinsamkeiten 4 Arten geschachtelte Klassen Elementklasse Lokale Klassen Anonyme Klassen Statisch geschachtelte Klassen Christian Schamott 2

Mehr

Implementieren von Klassen

Implementieren von Klassen Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und

Mehr

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden Kapitel 8 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Methoden Überladen von Methoden Der this-zeiger Konstruktoren Vererbung WS 07/08

Mehr

12 Abstrakte Klassen, finale Klassen und Interfaces

12 Abstrakte Klassen, finale Klassen und Interfaces 12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

Vererbung, Polymorphie

Vererbung, Polymorphie Vererbung, Polymorphie Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 21.1.08 G. Bohlender (IANM UNI Karlsruhe) Vererbung, Polymorphie 21.1.08

Mehr

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

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5. Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 23.5.07 G. Bohlender (IANM UNI Karlsruhe) Vererbung 23.5.07 1 / 22 Übersicht 1

Mehr

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

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0 9 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Wiederholung: Gerüstbeispiel Ein Duo, Quarto oder Sexto ist ein Gerüst. Die Klassen Duo, Quarto und Sexto sollen durch Vererbung

Mehr

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

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass: OOP (Java), 22. Aufzählungstypen 1/20 Objektorientierte Programmierung Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 35 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 35 1 Grundlagen 2 Verdeckte Variablen 3 Verdeckte Methoden 4 Konstruktoren

Mehr

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

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18

Mehr

Programmieren 2 Java Überblick

Programmieren 2 Java Überblick Programmieren 2 Java Überblick 1 Klassen und Objekte 2 Vererbung 3 Schnittstellen 5 Exceptions 6 Funktionsbibliothek 7 Datenstrukturen und Algorithmen 8 Ein-/Ausgabe 9 Graphische Benutzeroberflächen 10

Mehr

Präsentation Interfaces

Präsentation Interfaces Einführung in Java Präsentation Interfaces Nozar Delassaei Marvi Inhalt 1. Erinnerung Klasse Objekte Beispiel Klasse Abstrakte Klasse Beispiel Abstrakte Klasse Mehrfachvererbung-1 Mehrfachvererbung-2 2.

Mehr

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

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

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe. Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe http://www.zitate-online.de/autor/goethe-johann-wolfgang-von/ http://www.weimar-lese.de/files_weimar_lese/johann_wolfgang_von_goethe_bearbeitet_von_andreas_werner.jpg

Mehr

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Grundzüge der Programmierung. Wiederverwendung VERERBUNG Grundzüge der Programmierung Wiederverwendung VERERBUNG Inhalt dieser Einheit Syntax: Vererbung in Java Superklassen - Subklassen Konstruktorenaufruf in Subklassen super, abstract und final 2 Code-Reuse

Mehr

1 Abstrakte Klassen, finale Klassen und Interfaces

1 Abstrakte Klassen, finale Klassen und Interfaces 1 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 13: Interfaces Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme 1. Teil: Interfaces Motivation Eigenschaften Besonderheiten Anonyme Klassen Lambda-Ausdrücke Praxis:

Mehr

Innere Klassen in Java

Innere Klassen in Java Innere Klassen in Java SS 2012 Prof. Dr. Margarita Esponda Innere Klassen Klassen- oder Interfacedefinitionen können zur besseren Strukturierung von Programmen verschachtelt werden Eine "Inner Class" wird

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 22 Einstieg in die Informatik mit Java Generics Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Überblick Generics 2 Generische Klassen 3 Generische Methoden 4

Mehr

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

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014 OOP Objekte = Verhalten (durch Methoden) + Daten (durch Attribute) Klassen = Baupläne für Objekte Kapselung von Programmteilen

Mehr

Enumerations und innere Klassen

Enumerations und innere Klassen Enumerations und innere Klassen Programmiermethodik Eva Zangerle Universität Innsbruck Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung

Mehr

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 27 Einstieg in die Informatik mit Java Klassen als Datenstrukturen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick: Klassen als Datenstruktur 2 Vereinbarung

Mehr

EINFÜHRUNG IN DIE PROGRAMMIERUNG

EINFÜHRUNG IN DIE PROGRAMMIERUNG EINFÜHRUNG IN DIE PROGRAMMIERUNG OBJEKTORIENTIERTES PROGRAMMIEREN Tobias Witt 25.03.2014 10:30-12:00 Täglich Übungen zur Vertiefung Laptop hier nicht erforderlich Aber in den Übungen! Linux, OS X http://hhu-fscs.de/linux-install-party/

Mehr

Objektorientierte Programmierung. Kapitel 14: Interfaces

Objektorientierte Programmierung. Kapitel 14: Interfaces 14. Interfaces 1/26 Objektorientierte Programmierung Kapitel 14: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2013/14 http://www.informatik.uni-halle.de/ brass/oop13/

Mehr

Kapitel 5: Interfaces

Kapitel 5: Interfaces Liste P: Programmieren mit Java WS 2001/2002 Prof. Dr. V. Turau FH Wiesbaden Kapitel 5: Interfaces Folie 82 : Einleitung Betrachtet man die Programmierleistung für ein Produkt über einen längeren Zeitraum,

Mehr

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 2 22.03.2017 Was bisher geschah... Klassen und Objekte Attribute und Methoden Klasse Bruch

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 41 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick: Vererbung 2 Grundidee Vererbung 3 Verdeckte Variablen

Mehr

Prof. W. Henrich Seite 1

Prof. W. Henrich Seite 1 Klasse - ist ein benutzerdefinierter Datentyp (Referenztyp) - hat Datenelemente - hat Methoden - Konstruktor ist spezielle Methode zum Erstellen eines Objektes vom Typ der Klasse (Instanz) - jede Klasse

Mehr

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

Innere Klassen. Innere Klassen. Page 1. Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen. 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

Mehr

C++ - Objektorientierte Programmierung Vererbung

C++ - Objektorientierte Programmierung Vererbung C++ - Objektorientierte Programmierung Vererbung Personen Kunden Mitarbeiter Verwaltung Verkäufer Leibniz Universität IT Services Anja Aue Vererbung Definition von Klassen auf Basis von bestehenden Klassen.

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 13 Einstieg in die Informatik mit Java Schnittstellen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 13 1 Einführung 2 Definition einer Schnittstelle 3 Implementierung

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 34 Einstieg in die Informatik mit Java Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 34 1 Definition von Klassen 2 Methoden 3 Methoden

Mehr

Methoden und Wrapperklassen

Methoden und Wrapperklassen Methoden und Wrapperklassen CoMa-Übung IV TU Berlin 06.11.2012 CoMa-Übung IV (TU Berlin) Methoden und Wrapperklassen 06.11.2012 1 / 24 Themen der Übung 1 Methoden 2 Wrapper-Klassen CoMa-Übung IV (TU Berlin)

Mehr

Arten von Klassen-Beziehungen

Arten von Klassen-Beziehungen Arten von Klassen-Beziehungen Untertypbeziehung: Ersetzbarkeit Vererbung von Code aus Oberklasse irrelevant Vererbungsbeziehung: Klasse entsteht durch Abänderung anderer Klassen Ersetzbarkeit irrelevant

Mehr

Kapitel 4: Klassen und Unterklassen

Kapitel 4: Klassen und Unterklassen Liste P: Programmieren mit Java WS 2001/2002 Prof. Dr. V. Turau FH Wiesbaden Kapitel 4: Klassen und Unterklassen Folie 54 : Unterklassen Die Bildung von Unterklassen und das Konzept der Vererbung sind

Mehr

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 5 12.04.2017 Was bisher geschah... Objektorientierte Programmierung Klassen und Objekte, Attribute

Mehr

Vererbung und Polymorphie

Vererbung und Polymorphie Vererbung und Polymorphie Marc Satkowski, Sascha Peukert 29. September 2016 C# Kurs Gliederung 1. Methodenüberladung 2. Vererbung Polymorphie Methoden- & Eigenschaftsüberschreibung Weitere Schlüsselwörter

Mehr

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java 3 Objektorientierte Konzepte in Java 3.1 Klassendeklarationen Fragen an die Klassendeklaration: Wie heißt die Klasse? Wer darf auf die Klasse und ihre Attribute/Methoden zugreifen? Ist die Klasse eine

Mehr

4. Vererbung Die Klasse Object. Die Klasse Object

4. Vererbung Die Klasse Object. Die Klasse Object 4. Vererbung Die Klasse Object Die Klasse Object Alle Klassen ohne explizit deklarierte Superklasse haben die Klasse Object als Superklasse. Object gehört zum Paket java.lang. Object verfügt über einige

Mehr

Info B VL 10: Innere Klassen

Info B VL 10: Innere Klassen Info B VL 10: Innere Klassen Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 10: Innere Klassen p.221

Mehr

14 Abstrakte Klassen, finale Klassen, Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt. Für eine abstrakte Klasse

Mehr

C++ Klassen weitere Funktionen

C++ Klassen weitere Funktionen C++ Klassen weitere Funktionen Übersicht static Elemente const Elemente Zusätzliches zu Konstruktoren Kopier-Konstruktor Konvertierung-Konstruktor Initialisierungslisten Friend Funktionen 2 Statische Klassenkomponenten

Mehr

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

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen Auswertung von Ausdrücken Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt.

Mehr

Programmieren I. Kapitel 10. Spezielle Features

Programmieren I. Kapitel 10. Spezielle Features Programmieren I Kapitel 10. Spezielle Features Kapitel 10: Spezielle Features Ziel: Besonderheiten von Java bei OO Konzepten statische Attribute und Methoden innere, verschachtelte und lokale Klassen anonyme

Mehr

Fragen zur OOP in Java

Fragen zur OOP in Java - 1 - Inhalt Was bedeutet OOP?... 2 Was versteht man unter einer Klasse?... 2 Wie nennt man die Mitglieder einer Klasse?... 2 Wie erzeugt man Objekte?... 2 Wie greife ich auf Member einer Klasse zu?...

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Skript zur Vorlesung: Einführung in die Programmierung WiSe 2009 / 2010 Skript 2009 Christian Böhm, Peer Kröger, Arthur Zimek Prof. Dr. Christian Böhm Annahita Oswald Bianca Wackersreuther Ludwig-Maximilians-Universität

Mehr

Objektorientierung (OO)

Objektorientierung (OO) Objektorientierung (OO) Objekte haben Zustände (oder Eigenschaften, Attribute) und Verhalten Zustände: Objektvariablen (in Java auch fields) Verhalten (oder Aktionen): Methoden (methods, Funktionen) members

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form

Mehr

Einführung in die Programmiersprache Java II

Einführung in die Programmiersprache Java II Einführung in die Programmiersprache Java II ??????????? UML OOP "Object oriented programming is bad" - professional retard 90s... UML Entwicklungsziele verschiedenen existierenden objektorienten Modellierungsmethoden

Mehr

Einführung in die Programmierung für NF. Vererbung

Einführung in die Programmierung für NF. Vererbung Einführung in die Programmierung für NF Vererbung Ziele Vererbungsprinzip der objektorien=erten Programmierung verstehen und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden

Mehr

Java Einführung Vererbung und Polymorphie. Kapitel 13

Java Einführung Vererbung und Polymorphie. Kapitel 13 Java Einführung Vererbung und Polymorphie Kapitel 13 Inhalt Klassifikation (UML) Implementierung von Vererbungshierarchien Überschreiben von Methoden Polymorphismus: Up-Casting und Dynamisches Binden Schlüsselwort

Mehr

Vererbung & Schnittstellen in C#

Vererbung & Schnittstellen in C# Vererbung & Schnittstellen in C# Inhaltsübersicht - Vorüberlegung - Vererbung - Schnittstellenklassen - Zusammenfassung 1 Vorüberlegung Wozu benötigt man Vererbung überhaubt? 1.Um Zeit zu sparen! Verwendung

Mehr

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie Anwendungsentwicklung mit Java Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie Vererbung (1) 2 Problem: Objekte mit gleichen Attributen/Methoden, aber nicht völlig identisch, z.b., LKW, PKW,

Mehr

Tag 8 Repetitorium Informatik (Java)

Tag 8 Repetitorium Informatik (Java) Tag 8 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Informatik-Repetitorium

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung Kapitel 6 Vererbung Vererbung 1 Ziele Das Vererbungsprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 11: Vererbung Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil Einführung in die Vererbung Motivation Das Schlüsselwort extends Einführendes

Mehr

Klassen als Datenstrukturen

Klassen als Datenstrukturen Einstieg in die Informatik mit Java, Vorlesung vom 27.11.07 Übersicht 1 Klassen als Datenstruktur 2 Vereinbarung von Klassen 3 Erzeugen von Objekten - Instanzen einer Klasse 4 Zugriff auf Attribute 5 Initialisierung

Mehr

Java für Bauingenieure

Java für Bauingenieure 1 JAVA für Bauingenieure Alexander Karakas SS 2008 Objektorientierte Programmierung 30.04.2008, CIP Pool Objektorientierte Programmierung Übersicht 2 Klasse und Objekt Polymorphismus und Vererbung Klassen

Mehr

6. Globalübung (zu Übungsblatt 8)

6. Globalübung (zu Übungsblatt 8) 6. Globalübung (zu Übungsblatt 8) Inhalt: Klassenhierarchien Verdecken von Attributen Überschreiben von Methoden Codeanalyse Analyse von JAVA-Programmen Semestralklausur Klausurtermin: Mittwoch 11.01.2006

Mehr

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

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz Kapitel 13 Abstrakte Methoden und Interfaces 13. Abstrakte Klassen und Interfaces 1. Abstrakte Klassen 2. Interfaces und Mehrfachvererbung Folie 12.2 Abstrakte Methoden und Klassen Manchmal macht es überhaupt

Mehr

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

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe: Musterlösung Übung 7 Aufgabe 1 Sehen wir uns zu allererst das gegebene Forth Programm an: 0 3 new - list constant list1 list1 5 new - list constant list2 list1 6 new - list constant list3 list2 2 new -

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 09: Vererbung Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil Einführung in die Vererbung Motivation Das Schlüsselwort extends Einführendes

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 25 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 25 1 Die Philosophie 2 Definition

Mehr

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der Vererbung Vererbung ist ein Konzept der objektorientierten Programmierung,, die es ermöglicht neue Klassen von bereits vorhandenen Klassen abzuleiten. In einer abgeleiteten Klasse (subclass) muss nur spezifiziert

Mehr

Vorlesung Datenstrukturen

Vorlesung Datenstrukturen Vorlesung Datenstrukturen Objektorientierung in C++ (3) Aspekte der Vererbung (1) Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 546 Zuweisung bei Vererbung Dr. Frank Seifert Vorlesung

Mehr

Objektorientierte Programmierung und Klassen

Objektorientierte Programmierung und Klassen Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 16.5.07 G. Bohlender (IANM UNI Karlsruhe) OOP

Mehr

Vererbung, Polymorphismus

Vererbung, Polymorphismus Vererbung, Polymorphismus INE2 M. Thaler, tham@zhaw.ch Office TG208 http://www.zhaw.ch/~tham 1 Um was geht es? Automobilbau Firma produziert Limousine Kunde möchte Kombi Wielösen? Möglichkeiten Neudesign

Mehr

Java I Vorlesung Vererbung und Sichtbarkeit

Java I Vorlesung Vererbung und Sichtbarkeit Java I Vorlesung 4 Vererbung und Sichtbarkeit 17.5.2004 Vererbung Überladen, Überschreiben, Verstecken, Verschatten Zugriffskontrolle Statische Members Wiederholung: OOP Programme bestehen aus Klassen.

Mehr

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik Methoden und Klassen Silke Trißl Wissensmanagement in der Bioinformatik Wiederholung Jede Applikation braucht eine Klasse mit einer main-methode Eintrittspunkt in das Programm Die main-methode wird public

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Einführung in die objektorientierte Programmierung 2 Einordnung in den Softwareentwicklungsprozess Softwareentwicklung mit JAVA Planung Entwurf Programmierung Test/Evaluation/Pflege

Mehr

Überschreiben von Methoden

Überschreiben von Methoden Vergleich der DoME Realisierungen: Methode ausgeben Version 1 (ohne Vererbung): Anzeigen aller Informationen CD: A Swingin Affair (64 Min)* Frank Sinatra Titelanzahl: 16 Mein Lieblingsalbum von Sinatra

Mehr

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja Aue

Mehr

Einführung in C# Teil 3. Matthias Nübling

Einführung in C# Teil 3. Matthias Nübling Einführung in C# Teil 3 Matthias Nübling Vorausgesetzte Grundkenntnisse Programmierung Typen, Variablen, Anweisungen, Funktionen, etc. Objektorientierte Programmierung Klassen, Vererbung, Polymorphismus,

Mehr

4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor:

4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor: 4. Vererbung Grundlagen der Vererbung 4. Vererbung 4. Vererbung Grundlagen der Vererbung Idee der Vererbung Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 39 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 39 1 Überblick:

Mehr

Theorie zu Übung 8 Implementierung in Java

Theorie zu Übung 8 Implementierung in Java Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept

Mehr

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

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces Programmieren I Martin Schultheiß Hochschule Darmstadt Wintersemester 2010/2011 1 / 20 Polymorphie/Späte Bindung Abstrakte Klassen Interfaces 2 / 20 Definition: Polymorphie Der Begriff Polymorphie (manchmal

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 28 Einstieg in die Informatik mit Java Variablenarten Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 28 1 Überblick: Variablenarten 2 Lokale Variablen 3 Lokale Variablen

Mehr

II.4.4 Exceptions - 1 -

II.4.4 Exceptions - 1 - n 1. Unterklassen und Vererbung n 2. Abstrakte Klassen und Interfaces n 3. Modularität und Pakete n 4. Ausnahmen (Exceptions) n 5. Generische Datentypen n 6. Collections II.4.4 Exceptions - 1 - Ausnahmen

Mehr

12. Java Klassen. Klassen - Technisch. Beispiel: Erdbebendaten. Klassen - Konzeptuell

12. Java Klassen. Klassen - Technisch. Beispiel: Erdbebendaten. Klassen - Konzeptuell Klassen - Technisch Eine Klasse ist eine Einheit mit einem Namen, die Daten und Funktionalität beinhaltet 12. Java Klassen Klassen, Typen, Objekte, Deklaration, Instanzierung, Konstruktoren, Kapselung,

Mehr

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java 3 Objektorientierte Konzepte in Java Bisherige Beobachtungen zu Objekten: werden in Klassen zusammengefasst besitzen Eigenschaften und Verhalten verbergen private Informationen werden geboren, leben und

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Abstrakte Klassen und Methoden & Interfaces Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer #2 Vererbungshierarchie

Mehr

Programmieren in Java -Eingangstest-

Programmieren in Java -Eingangstest- Programmieren in Java -Eingangstest- Nummer: 1. Studiengang: Informatik B.Sc. Informatik M.Sc. ESE B.Sc. ESE M.Sc. Sonstiges: Fachsemester: Bitte Fragen, die Sie nicht beantworten können unbedingt mit

Mehr