Verschachtelte Klassen

seux

Aktives Mitglied
Hallo,
ich versuch grad zwei Klassen inneinader zu verschachteln. Das Ziel ist, das ich die innere Klasse ungefähr so aufrufen kann
Java:
OuterClass out = new OuterClass.InnerClass(123);

Bisher sieht mein Java Code dazu so aus.

Java:
class OuterClass
{
	int m_i;
	
	public getI()
	{
		return m_i;
	}
	
	class InnerClass extends OuterClass
	{
		public InnerClass(int j)
		{
			m_i = j;
			System.out.println("m_i: " + m_i);
		}
	}
}

Der Compiler spuckt mir aber für den obigen aufruf den Fehler
Code:
error: non-static variable this cannot be referenced from a static context
und dann verweist er auf das "new" vom Aufruf
 

pro2

Bekanntes Mitglied
Versuchst du, den obigen Aufruf aus einer main auszuführen? Wenn ja, das geht nicht, da die main eine statische Funktion ist. Unterschied statisch/non-statisch -> Forumsuche, wurde unzählige male hier erklärt.

Schreib innerhalb der Klasse die Initialisierung und dann arbeite in der main damit, dürfte funktionieren.

edit: Deine Methode
Code:
getI()
ist auch falsch, du hast keinen Return Typ angegeben.
edit2: Und das was du machen willst, funktioniert so eh nicht. Am besten baust du dir eine Instanz der inneren Klasse direkt in deiner Äußeren Klasse, um damit später zu arbeiten. Oder du machst die Innere Klasse static, dann kannst du einfach schreiben
Code:
OuterClass.InnerClass out = new OuterClass.InnerClass(123);
..
 
Zuletzt bearbeitet:

tfa

Top Contributor
Außerdem kannst du kein Objekt der inneren Klasse anlegen, wenn keins der äußeren existiert. Der korrekte Aufruf muss so heißen:
Java:
OuterClass out = new OuterClass().new InnerClass(123);
 

seux

Aktives Mitglied
Danke schonmal für eure antworten :)

Außerdem kannst du kein Objekt der inneren Klasse anlegen, wenn keins der äußeren existiert.

Ich dachte durch die Polymorphie sei dies möglich. Nachdem ich den Konstruktor der inneren Klasse aufgerufen hab, möchte ich im weiteren Verlauf gerne mit meinem OuterClass Objekt weiterarbeiten.

@pro2:
ja, ich hab versucht den aufruf in main auszuführen. Ich werd mich gleich mal zu static informieren. Das mit getI() hab ich korigiert.
Zu deinem zweiten edit:
Da legst du ja auch ein Object der inneren Klasse an, dass möchte ich aber nicht. Es soll schon mit der äußeren Klasse weitergearbeitet werden.
 
M

Marcinek

Gast
Dann sollte man InnerClass nicht als InnerClass sondern einfach als normale Klasse implementieren, dann geht das auch ;D
 
B

...ButAlive

Gast
@seux Was für einen Vorteil erwartest du dir denn dadurch, dass du eine Innere-Klasse hast? Wie bereits erwähnt tut es in deinem Fall eine ganz normale Klasse die von Outer erbt auch. Das mit den inneren Klassen ist so ein Thema für sich in Java, ehrlich gesagt hab ich selten einen Fall gesehen, der sich nicht auch ohne innere Klassen lösen hätte können. Meistens kommt dann auch noch übersichtlicher Code raus.

@irgendjemand
Polymorphie. Echt das gibt es in Java nicht?
 
I

irgendjemand

Gast
...ButAlive;843745@irgendjemand [URL="http://de.wikipedia.org/wiki/Polymorphie_%28Programmierung%29" hat gesagt.:
Polymorphie[/URL]. Echt das gibt es in Java nicht?

NEIN ... denn Generics und Interfaces haben in Java nichts mit eigentlicher Polymorphie wie z.B. überladenen Operatoren oder mehreren Basis-Klassen zu tun ... sondern sind lediglich normaler Sprachsyntax ...

wer allerdings in diesem wiki-artikel darauf gekommen ist Interfaces als Polymorphie zu bezeichnen weis ich nicht ...
 
B

...ButAlive

Gast
Polymorphie heißt nur, dass für den Aufrufer es vollkommend egal ist was er für einen konkreten Typen hat, solange dieser die Methoden anbietet, die der Aufrufer für seine Aufgabe braucht.

Man braucht keine Mehrfachvererbung für Polymophie, man braucht noch nicht mal unbedingt Interfaces um Polymorphie zu haben.

Java:
public void printHashcode(Object o){
   System.out.println(o.hashCode());
}

Diese Methode kann ich mit jedem beliebigen Objekt in Java aufrufen, was o konkret ist, interessiert an der Stelle nicht.

Generics hat mit Polymorphie wirklich nicht viel zu tun, Interfaces schon.
 

seux

Aktives Mitglied
@seux Was für einen Vorteil erwartest du dir denn dadurch, dass du eine Innere-Klasse hast? Wie bereits erwähnt tut es in deinem Fall eine ganz normale Klasse die von Outer erbt auch. Das mit den inneren Klassen ist so ein Thema für sich in Java, ehrlich gesagt hab ich selten einen Fall gesehen, der sich nicht auch ohne innere Klassen lösen hätte können. Meistens kommt dann auch noch übersichtlicher Code raus.

hmm, ich wollte das mit der inneren Klasse machen, um zu zeigen zu welcher Hauptklasse das gehöhrt, um eventuelle doppeldeutigkeiten mit Klassennamen zu umgehen. Aber ich glaub ich sollte mir mal Packages angucken...
 

tfa

Top Contributor
hmm, ich wollte das mit der inneren Klasse machen, um zu zeigen zu welcher Hauptklasse das gehöhrt, um eventuelle doppeldeutigkeiten mit Klassennamen zu umgehen. Aber ich glaub ich sollte mir mal Packages angucken...

Statt der inneren Klasse kannst du auch einfach eine statische, verschachtelte Klasse verwenden. Schreibe einfach ein [c]static[/c] vor das [c]class[/c] der eingebetteten Klasse. Die kannst du dann ganz normal wie eine Top-Level-Class benutzen.
 

André Uhres

Top Contributor
Interfaces als Polymorphie zu bezeichnen

In der Tat, eine Schnittstelle ist oft kein Gegenstand, der viele Formen haben kann, sondern eher eine Eigenschaft, die wir beliebigen Gegenständen zuordnen können. Nichtsdestotrotz können wir in Java mit Interfaces die Vorteile der "Polymorphie" nutzen, ohne eine Klassenvererbung aufbauen zu müssen ;).

Gruß.
André
 
Zuletzt bearbeitet:

Landei

Top Contributor
Der Begriff "Polymorphie" ist selbst ziemlich "polymorph", es gibt ganz verschiedene Versionen davon:

Arten der Polymorphie

- Polymorphie überladener Operatoren
- Polymorphie der Objektorientierten Programmierung
- Polymorphie einer Funktion bzw. Prozedur
- Polymorphie von Datentypen oder Klassen
- Polymorphie bei der Softwareentwicklung
Polymorphie (Programmierung) ? Wikipedia

Sicher gibt es noch mehr Varianten...
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J static verschachtelte Klassen und innere Klassen Java Basics - Anfänger-Themen 1
S Verschachtelte for-Schleife Java Basics - Anfänger-Themen 2
laxla123 Verschachtelte If-Else Schleife Java Basics - Anfänger-Themen 21
W Verschachtelte If-else --> finde meinen Fehler nicht Java Basics - Anfänger-Themen 30
Düsseldorf2002 Datentypen Verschachtelte LinkedList Java Basics - Anfänger-Themen 5
J Verschachtelte Methoden Java Basics - Anfänger-Themen 9
P Verschachtelte Hashmap Java Basics - Anfänger-Themen 6
P Verschachtelte Array Liste Java Basics - Anfänger-Themen 2
B Verschachtelte For Schleifen Java Basics - Anfänger-Themen 8
W Verschachtelte Objekte wieder auspacken Java Basics - Anfänger-Themen 3
S Verschachtelte Schleife Java Basics - Anfänger-Themen 3
F Methoden Verschachtelte if else Methode Java Basics - Anfänger-Themen 10
Z Verschachtelte If-Bedingung Java Basics - Anfänger-Themen 6
Y Verschachtelte For-Schleife Java Basics - Anfänger-Themen 5
D verschachtelte Schleifen Java Basics - Anfänger-Themen 6
M Verschachtelte Forschleifen Java Basics - Anfänger-Themen 2
F Klassen Zugriff auf verschachtelte Objekte Java Basics - Anfänger-Themen 11
TheMenox Verschachtelte If Bedingung Java Basics - Anfänger-Themen 4
R Verschachtelte Arraylist und deren Größe auslesen Java Basics - Anfänger-Themen 7
C Verschachtelte Map auslesen Java Basics - Anfänger-Themen 4
H Best Practice Wie mit break verschachtelte Schleifen komplett verlassen? Java Basics - Anfänger-Themen 2
F Verschachtelte Schleifen Java Basics - Anfänger-Themen 4
J Hilfe verschachtelte Schleifen Java Basics - Anfänger-Themen 5
F Erste Schritte Switch case vs. Verschachtelte If Anweisung Java Basics - Anfänger-Themen 11
G Collections verschachtelte ArrayList abfüllen Java Basics - Anfänger-Themen 5
X verschachtelte suche Java Basics - Anfänger-Themen 8
S Verschachtelte Exceptions - Übersicht verbessern Java Basics - Anfänger-Themen 2
D Verschachtelte Objekterzeugung Java Basics - Anfänger-Themen 6
S verschachtelte for-Schleife Java Basics - Anfänger-Themen 6
X Verschachtelte Annotationen Java Basics - Anfänger-Themen 9
J verschachtelte Schleife Java Basics - Anfänger-Themen 10
P Verschachtelte Schleife vorzeitig abbrechen. Java Basics - Anfänger-Themen 50
S verschachtelte for Schleife und Ergebniss. Java Basics - Anfänger-Themen 3
J verschachtelte for-schleifen Java Basics - Anfänger-Themen 2
D Verschachtelte IF-Anweisung Java Basics - Anfänger-Themen 10
C Verschachtelte for-schleifen Java Basics - Anfänger-Themen 10
C Verschachtelte For-Schleifen Java Basics - Anfänger-Themen 5
3 Verschachtelte Zuweisung Java Basics - Anfänger-Themen 4
M Tief verschachtelte Packages Java Basics - Anfänger-Themen 7
T add-Methode für verschachtelte ArrayLists Java Basics - Anfänger-Themen 10
C Verschachtelte For-Schleife Java Basics - Anfänger-Themen 6
E Verschachtelte If-Anweisungen - "else without if" Java Basics - Anfänger-Themen 4
T Datentypen Verschachtelte Map durchlaufen Java Basics - Anfänger-Themen 4
P Verschachtelte For-Schleifen Java Basics - Anfänger-Themen 4
F Verschachtelte Arrays kopieren und überschreiben Java Basics - Anfänger-Themen 4
J Verschachtelte for schleife mit dynamischer Anzahl an Schleifen Java Basics - Anfänger-Themen 10
M Verschachtelte Strukturen. Java Basics - Anfänger-Themen 7
J Verschachtelte for-Schleife mit Löschen von Iterationen. Wie über Iterator abbilden? Java Basics - Anfänger-Themen 6
M Viele verschachtelte Schleifen Java Basics - Anfänger-Themen 14
A Verschachtelte Hashtable ausgeben. Java Basics - Anfänger-Themen 3
W verschachtelte while schleife Java Basics - Anfänger-Themen 8
G Verschachtelte Case Fallunterscheidung Java Basics - Anfänger-Themen 7
W verschachtelte For-Schleife - continue Java Basics - Anfänger-Themen 8
R Verschachtelte Schleife? Java Basics - Anfänger-Themen 6
M sehr weit verschachtelte XML-datei mit jdom auslesen Java Basics - Anfänger-Themen 4
S verschachtelte while Schleifen Java Basics - Anfänger-Themen 5
R Bedingte Opeatoren / Verschachtelte Operatoren Java Basics - Anfänger-Themen 4
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
C Array von Klassen Java Basics - Anfänger-Themen 2
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
L Best Practice Annotierte Klassen im Classpath herausfinden Java Basics - Anfänger-Themen 1
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
Speedrunner klassen aufrufen Java Basics - Anfänger-Themen 41
M Log4J (v2) nachträglich in allen Klassen hinzufügen Java Basics - Anfänger-Themen 9
D importieren eigener Klassen Java Basics - Anfänger-Themen 12
W Wo ist der Wurm in meinem Grundverständnis von Klassen? Java Basics - Anfänger-Themen 22
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
elsaaaaaa Wochentag als String ausgeben mit JDK Klassen Java Basics - Anfänger-Themen 6
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
Z Mehtode bei Start des Programms ausführen (Klassen übergreifend) Java Basics - Anfänger-Themen 12
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
TimoN11 Java Klassen Global einbinden Java Basics - Anfänger-Themen 1
B Inventar als einzelne Klassen anlegen? Java Basics - Anfänger-Themen 12
G Java Klassen und Instanzmethoden Java Basics - Anfänger-Themen 15
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben