PG 2.11 Innere Klassen Flashcards
Wie viele non-public Einheiten kann eine .java Datei enthalten
maximal eine public Klasse/Interface/Enumeration/Record, aber beliebig viele non-public Einheiten
Java: Klassen ineinander schachteln: wie heißt die äußerste Klasse?
top level class
Java: Klassen ineinander schachteln: welche Arten der inneren Klassen?
- statische innere Klasse (nested class):
class A{
static class B{ }
}
=============
-nicht-statische innere Klasse (inner class):
class A{
class B{ }
}
=============
-lokale Klasse:
class A{
void methode(){
class B{ }
}
}
==============
-anonyme Klasse:
class A{
void methode(){
new Object(){
//Methoden überschreiben
}
}
}
statische innere Klassen
class A{
static class B{ }
}
- Sichtbarkeit beschränkt auf umschließende Klasse
- Um Objekt zu erzeugen muss der Name der äußeren Klasse in der Punktnotation vor der inneren Klasse gestellt sein: Außen.Innen b = new Außen.Innen();
-Innen kann auf alle Attribute und Methoden von Außen zugreifen, auch private (nicht in einer Vererbungslinier)
Nicht-statische innere Klassen
class A{
class B{ }
}
-nur innerhalb von Instanzen der äußeren Klasse existieren.
-innere Objekt hat vollen Zugriff auf Attribute und Methoden der äußeren Klasse
-erzeugen eines Objekts benötigt zwei new Operatoren: Außen.Innen i = new Außen().new Innen();
Lokale Klassen
class A{
void methode(){
class B{ }
}
}
-auch innerhalb von Methoden ja sogar in jedem beliebigen Block definierbar
-nicht nur auf Methoden und Attribute der äußeren Klasse sondern auch auf die lokalen Variabeln des umgebenden Blocks zugreifen (Variabeln müssen final sein)
Anonyme Klassen
class A{
void methode(){
new Object(){
//Methoden überschreiben
}
}
}
-namenlose lokale Klassen, von denen nur ein einziges Objekt erzeugt wird
Bsp:
interface Ausgabe{
public void ausgeben();
}
Ausgabe anon = new Ausgabe() {
@Override
public void ausgeben(){
System.out.println(“Hello from anon Class!”);}
};
anon.ausgeben();