innere Klassen



  • Hallo,

    Ich verstehe nicht so ganz, was innere Klassen sind und wozu
    sie gut sein sollen ?
    Besonders verstehe ich nicht folgende Unterscheidung von inneren Klassen:
    - Mitgliedsklassen (Member Classes)
    - Statische Mitgliedsklassen
    - Lokale Klassen
    - Anonyme Klassen

    Kann mir jemand weiterhelfen ?

    Harri1



  • Harri1 schrieb:

    Hallo,

    Ich verstehe nicht so ganz, was innere Klassen sind und wozu
    sie gut sein sollen ?
    Besonders verstehe ich nicht folgende Unterscheidung von inneren Klassen:
    - Mitgliedsklassen (Member Classes)
    - Statische Mitgliedsklassen
    - Lokale Klassen
    - Anonyme Klassen

    Kann mir jemand weiterhelfen ?

    Harri1

    Member Class: Innere Klasse auf "Memberebene"; also auf der Ebene wie Methodendeklarationen und Felder (Member eben)

    Statische Member: eine Member mit dem Schlüsselwort static versehen, also

    static class InnerClass{....}
    

    Hierbei wird eine Klasse innerhalb einer anderen Klasse definiert und mit dem Attribut static versehen. In diesem Fall erzeugt der Compiler Code, der genau dem einer gewöhnlichen globalen Klasse entspricht. Insbesondere ist eine statische lokale Klasse nicht nur innerhalb der Klasse sichtbar, in der sie definiert wurde, sondern kann auch von außen instanziert werden. Sie hält auch keinen Verweis auf die instanzierende Klasse und kann somit nicht auf deren Membervariablen zugreifen. Der einzige Unterschied zu einer globalen Klasse besteht darin, daß der Name der inneren Klasse als Präfix den Namen der äußeren Klasse enthält. Beide sind durch einen Punkt voneinander getrennt.
    (aus dem Java Handbuch, welches frei zum Download steht)

    Lokale Klasse: innere Klasse die meist innerhalb von Methodendefinitionen steht (oder Konstruktoren oder static Initializers....)

    anonyme Klassen: Klasse ohne Name. Ist eine Einwegklasse die meistens beim EventHandling für GUI-Programmierung genutzt wird.

    In den oben genannten Java Handbuch ist das auch alles mit Beispilen erklärt.
    Und noch zur Frage wozu das gut ist.
    Es gibt verschieden Motivationen. Bei anonymen Klassen ist es einfach kürzer und bequemer die Klasse gleich dort zu definieren, wo sie gebraucht wird. Meist erbt man da von einem Standard Listener und überschreibt nur eine Methode.
    Lokale Klassen und statische hab ich noch nie benutzt, aber why not.
    Ja und Memberklassen sind manchmal schön wenn du eben etwas nur lokal innerhalb einer Klasse brauchst, es aber eigentlich zur Klasse an sich gehört (also vom Modellierungsaspekt). Also der Fall in dem ich meistens Memberklassen definiere sind einmal für GUIevents, wenn die Handler öfter in einer Klasse gebraucht werden oder zu groß sind, als das man sie noch schön als anonyme schreiben könnte, oder wenn ich ein Objekt habe, in welchem eigentlich nur Daten gekapselt sind und da irgendwie manchmal ein Thread drüber läuft und irgendetwas prüft.


Anmelden zum Antworten