InnerClasses

Status
Nicht offen für weitere Antworten.

Evolver

Bekanntes Mitglied
Also eigentlich dachte ich, ich wäre mir über innere Klassen völlig im Klaren, aber da habe ich mich getäuscht.

Code:
class MyUpperClass
{
	public class MyInnerClass
	{}
	
	public static class MyStaticInnerClass
	{}
}



class MyClass
{
	public MyClass()
	{
		MyUpperClass tUCObject = new MyUpperClass();
		
		MyUpperClass.MyStaticInnerClass tISCObject1 = new MyUpperClass.MyStaticInnerClass();
		
		tUCObject.MyStaticInnerClass tISCObject2 = new tUCObject.MyStaticInnerClass();
		
		MyUpperClass.MyInnerClass tICObject1 = new MyUpperClass.MyInnerClass();
		
		tUCObject.MyInnerClass tICObject2 = new tUCObject.MyInnerClass();
	}
}
Was ich erwartet hatte:
Zeile 18, OK.
Zeile 20, OK.
Zeile 22, Fehler.
Zeile 24, OK.

Was Fakt ist:
Zeile 18, OK.
Zeile 20, Fehler.
Zeile 22, OK.
Zeile 24, Fehler.


Wozu ist dann überhapt static bei inneren Klassen gut? Und wieso kann ich ohne Object von MyUpperClass ein Objekt von (der nicht statischen) MyInnerClass erzeugen?
 

Evolver

Bekanntes Mitglied
... When you declare a member class, you can instantiate that member class only within the context of an object of the outer class in which this member class is declared. ...
Das ist aber irgendwie das Gegenteil von Zeile 22 und 24. Denn in Zeile 22 lege ich ein Object einer (nicht statischen!) inneren Klasse außerhalb des Kontexts eines Objekts der äußeren Klasse an. Oder übersehe ich da etwas?
 
S

SlaterB

Gast
funktioniert ja auch nicht, oder läuft das bei dir?
Eclipse zeigt diesen Fehler bei mir erst an, wenn die anderen beiden auskommentiert sind
 

Evolver

Bekanntes Mitglied
Eine Frage ist mir noch eingefallen: Was bringt es denn eigentlich, die inneren (nicht-statischen) Klassen public zu machen, wenn ich doch nur innerhalb der "Besitzerklasse" darauf zugreifen kann? Ist das nur für den Zugriff auf öffentliche statische Methoden innerhalb der inneren Klasse (oder wie oder was)?
 

Niki

Top Contributor
Evolver hat gesagt.:
Eine Frage ist mir noch eingefallen: Was bringt es denn eigentlich, die inneren (nicht-statischen) Klassen public zu machen, wenn ich doch nur innerhalb der "Besitzerklasse" darauf zugreifen kann? Ist das nur für den Zugriff auf öffentliche statische Methoden innerhalb der inneren Klasse (oder wie oder was)?

du kannst auch von aussen drauf zugreifen, aber nur über das Parent-Objekt selbst:


Code:
MyUpperClass.MyInnerClass inner = new MyUpperClass().new MyInnerClass();
//oder
MyUpperClass upper = new MyUpperClass();
MyUpperClass.MyInnerClass inner = upper.new MyInnerClass();
 

Niki

Top Contributor
aja, und du kannst in einer nicht statischen inneren Klasse statische Methoden/Attribute deklarieren
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben