OOP Syntax beim Instanziieren mit new

wilmaed

Mitglied
Hallo,
Warum kann ich mit dieser Syntax die static Klasse Hund instanziieren?
Tier.Hund snoopy = new Tier.Hund();


Beispiel foo.java2: static Nested Class Hund
Das klappt:
Tier.Hund snoopy = new Tier.Hund();

Das klappt nicht:
Tier snoopy = new Tier();
Tier.Hund snoopy2 = snoopy.new Hund();


Java:
class Tier
   {
       static class Hund
           {
                void sprich()
                       {
                           System.out.println("wuff");
                       }
           }
   }

public class Foo2
   {
       public static void main(String[] args)
           {
               Tier.Hund snoopy = new Tier.Hund();   
               snoopy.sprich();
           }
   }

Und umgekehrt:
Beispiel foo.java: Inner Class Hund
Das klappt nicht:
Tier.Hund snoopy = new Tier.Hund();

Das klappt:
Tier snoopy = new Tier();
Tier.Hund snoopy2 = snoopy.new Hund();


Java:
class Tier
   {
       class Hund
           {
                void sprich()
                       {
                           System.out.println("wuff");
                       }
           }
   }

public class Foo
   {
       public static void main(String[] args)
           {
                   Tier snoopy = new Tier();
                   Tier.Hund snoopy2 = snoopy.new   Hund();      
                   snoopy2.sprich();

               //   Tier.Hund bello = new Tier.Hund();           
           }
   }
 
X

Xyz1

Gast
. bindet stärker als new. Ein new dazwischenzusetzen ist etwas verwirrlich, findest du nicht auch? Was ist eigentlich noch mal die Frage? Fehlendes Grundlagenverständnis?
 

wilmaed

Mitglied
Fehlendes Grundlagenverständnis?
ja.
Darum dachte ich, ich bin in der Kategorie "Java-Basics - Anfänger-Themen" richtig.

Ein new dazwischenzusetzen ist etwas verwirrlich, findest du nicht auch?

Ich habe diese Schreibweise gesehen und nicht verstanden.

Was ist eigentlich noch mal die Frage?

Frage1: was macht der Code?
bei non-static Hund gibt es keinen Compiler-Error, bei static Hund schon. Warum?

Code:
Tier snoopy = new Tier();
Tier.Hund snoopy2 = snoopy.new   Hund();


Frage2: warum erzeugt der Code bei static Hund keinen Error, bei non-static Hund schon?
Code:
Tier.Hund snoopy = new Tier.Hund();

Danke
 

Tobse

Top Contributor
Innere Klassen sind im Endeffekt ganz genauso Klassen wie alle anderen auch. Eine Statische Klasse unterscheidet sich - neben der Syntax - von einer regulären Klasse in nur einem Aspekt: Der Code hat Zugriff auf die private Eigenschaften der äußeren Klasse.

Eine nicht-statische innere Klasse unterscheidet sich in einem weiteren Aspekt: Jede Instanz der inneren Klasse ist an eine Instanz der äußeren gebunden. Um eine Instanz einer nicht-statischen inneren Klasse zu erstellen braucht es zwangsläufig eine Referenz auf eine Instanz der äußeren Klasse.

Daher auch die Syntax:

Java:
// Statische innere klasse:
Tier.Hund snoopy = new Tier.Hund();
// ist nichts anderes als
Hund snoopy = new Hund();
// nur das es eben ein wenig anders notiert wird.

//-----

// nicht-statische innere Klasse:
Tier.Hund snoopy = new Tier.Hund(); // Fehler -> es wird keine Referenz auf die äußere Klasse gegeben, die ist aber zwingend erforderlich

Tier xyz= new Tier();
Tier.Hund snoopy = new xyz.Hund(); // xyz ist die Referenz auf die äußere Klasse -> alles klar

P.S.: Du kannst dir ja mal ansehen, was der Compiler ausspuckt:

class Tier { static class Hund {} }

ergibt einmal Tier.class und Tier$Hund.class

Und wenn aus der inneren Klasse auf protected oder private Eigenschaften der äußeren Klasse zugegriffen wird, braut der Compiler Methoden in die äußere Klasse, um den Zugriff zu ermöglichen. Anstatt direkt auf die Eigenschaft zuzugreiffen wird dann ein Aufruf an die generierte Methode in die innere Klasse eingebaut.
Innere Klassen sind 100% Syntax-Sugar.

P.P.S.: Eine Klasse Hund in der Klasse Tier ist ein semantisches schwerverbrechen. Ich bin mir sicher, dass class Tier {} und class Hund extends Tier {} deutlich besser (wenn auch nicht optimal) ist.
 

Tobse

Top Contributor
OuterClass.InnerClass innerObject = outerObject.new InnerClass();

Hm, das stimmt in der Tat, habs eben mal getestet. Irgendwie hatte ich das anders in Erinnerung.

Dann kannst du dir folgendes merken:

Statische innere Klasse: Outter.Inner obj = new Outer.Inner();
Innere Klasse: Outter.Innter obj = outerObj.new Inner();


---
Nebenbei: Ich arbeite jetzt seit mehreren Jahren beruflich mit Java. Wie man gemerkt hat, wusste ich den Syntax nicht einmal. Dieses Feature braucht man nicht, wenn man eine gute Anwendungsarchitektur hat.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Syntax-Highlighting im Frontend Java Basics - Anfänger-Themen 3
J Syntax-Fehler? Java Basics - Anfänger-Themen 2
pkm Problem mit der JSP-Syntax Java Basics - Anfänger-Themen 2
M Datentypen Generische Datentypen - Syntax Java Basics - Anfänger-Themen 25
C Überprüfen eines Queltextes auf Syntax-Fehler und Laufzeitfehler Java Basics - Anfänger-Themen 2
L SQLITE - Syntax error Java Basics - Anfänger-Themen 3
W Wie vermerke ich diese Struktogramm Passage in Java Syntax? Java Basics - Anfänger-Themen 8
Aprendiendo [JAVA-Syntax] (int... variable) bei einem Konstruktor Java Basics - Anfänger-Themen 8
D Datentypen Datentyperstellung | Kompiler sagt Syntax Error doch ich find keine Lösung Java Basics - Anfänger-Themen 2
J Syntax error on token ";",, expected Java Basics - Anfänger-Themen 2
C Erste Schritte Syntax Error Java Basics - Anfänger-Themen 23
J java syntax verständnis Java Basics - Anfänger-Themen 6
D Erste Schritte Fehlermeldung "Syntax error on token ";", { expected after this token" Java Basics - Anfänger-Themen 13
1 Bei if-Anweisung: Syntax error on token Java Basics - Anfänger-Themen 5
D Fehler in der Syntax? Java Basics - Anfänger-Themen 6
L Nachkommastellen Runden, Problem mit Syntax " }" Java Basics - Anfänger-Themen 2
X Wann schreibt man diese Syntax zeichen { } Java Basics - Anfänger-Themen 8
V MasterMind Syntax Probleme Java Basics - Anfänger-Themen 5
P AUTO_INCREMENT Syntax-Fehler Java Basics - Anfänger-Themen 2
M Syntax error on token ";", { expected after this token Java Basics - Anfänger-Themen 3
K Erste Schritte eclipse syntax error token Java Basics - Anfänger-Themen 5
B Erste Schritte HILFE Brauche ein Beispiel für korrekte Syntax mit Semantikfehlern Java Basics - Anfänger-Themen 6
P Erste Schritte if Syntax Java Basics - Anfänger-Themen 19
S Syntax Error - source level Java Basics - Anfänger-Themen 12
B Syntax error Java Basics - Anfänger-Themen 6
K Input/Output Einsteiger Syntax Frage Java Basics - Anfänger-Themen 6
R Syntax error on token "}", delete this token Java Basics - Anfänger-Themen 2
S Syntax error on token "connect" Java Basics - Anfänger-Themen 4
K Klassen this-Referenz und Klassen/Methodenaufruf Syntax Java Basics - Anfänger-Themen 3
T Syntax für .split mit Klammern Java Basics - Anfänger-Themen 2
F Syntax- oder Semantikfehler? Java Basics - Anfänger-Themen 29
S Frage zu einem Syntax Java Basics - Anfänger-Themen 2
Luk10 Problem mit der Syntax von "+=" Java Basics - Anfänger-Themen 10
T Einen Syntax Checker programmieren Java Basics - Anfänger-Themen 3
J Datentypen Array Syntax Java Basics - Anfänger-Themen 2
S Anfängerproblem Syntax if Schleife Java Basics - Anfänger-Themen 13
Screen Problem mit der Syntax bei ActionListener Java Basics - Anfänger-Themen 3
U Dringend: Syntax error on token "else" Java Basics - Anfänger-Themen 8
E Verständnisfrage Syntax: frame.getContentPane().add(button) Java Basics - Anfänger-Themen 11
Y Anfängerfrage zu array(-Syntax) Java Basics - Anfänger-Themen 6
G Richtige Syntax für Bruch Java Basics - Anfänger-Themen 12
S Generic Methode: syntax klemmt Java Basics - Anfänger-Themen 10
C Frage zu Syntax-,Laufzeit-, Semantikfehler Java Basics - Anfänger-Themen 3
N Anfängerfrage richtige Syntax und Frage zu Vector Java Basics - Anfänger-Themen 7
O Highscore Syntax-Problem Java Basics - Anfänger-Themen 3
K Erklärung der Syntax Java Basics - Anfänger-Themen 6
G nicht bekannter Java-Syntax Java Basics - Anfänger-Themen 4
H wieso syntax error bei else ? Java Basics - Anfänger-Themen 3
T klasse objekt, syntax Java Basics - Anfänger-Themen 2
G Problem mit JTextField.setText(); Syntax Java Basics - Anfänger-Themen 3
S Syntax frage Java Basics - Anfänger-Themen 4
K java syntax: wofür steht super(screen)? Java Basics - Anfänger-Themen 5
L Syntax von subString Java Basics - Anfänger-Themen 19
B Syntax error on token ";", { expected after this t Java Basics - Anfänger-Themen 7
J Syntax Java Basics - Anfänger-Themen 14
C Verstehe die Syntax nicht! Java Basics - Anfänger-Themen 2
M Suche einen ganz einfachen Editor (syntax Highlighting+comp) Java Basics - Anfänger-Themen 7
M Komische Syntax bei Double-Buffering-Beispiel Java Basics - Anfänger-Themen 2
H Fehlermeldung bei korrekter Syntax Java Basics - Anfänger-Themen 2
G Syntax der if-Anweisung (Thema getrennt!) Java Basics - Anfänger-Themen 7
S RegEx Syntax - ich verstehe sie einfach nicht! Java Basics - Anfänger-Themen 3
H Syntax Frage. Java Basics - Anfänger-Themen 5
X Syntax bei != Java Basics - Anfänger-Themen 4
L setCharAt Syntax ? Java Basics - Anfänger-Themen 6
D page forward (?) suche syntax Java Basics - Anfänger-Themen 25
S syntax error variable declarator ID expected Java Basics - Anfänger-Themen 3
E Komische Syntax Java Basics - Anfänger-Themen 3
C Syntax Probleme mit Runtime javascript Java Basics - Anfänger-Themen 9
N Code-Editoren mit Syntax-Highlighting Java Basics - Anfänger-Themen 7
Juelin jedit Fehler beim starten Java Basics - Anfänger-Themen 2
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
A Hilfe beim Lesen von Pfaden und Systemvariablen Java Basics - Anfänger-Themen 3
M Ausgabe beim Overloading Java Basics - Anfänger-Themen 3
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
I Projekte in IDE untereinander sharen / Probleme beim Build Java Basics - Anfänger-Themen 8
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
T DamagedFontException beim drucken Java Basics - Anfänger-Themen 3
Z SNAKE Schlange beim Aufheben von Essen verlängern Java Basics - Anfänger-Themen 4
Bugs Bunny Fehlerhafte Berechnung beim erneuten Durchlaufen der Schleife Java Basics - Anfänger-Themen 5
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
Fiedelbambu Prüfen von Komma stelle beim Taschenrechner Java Basics - Anfänger-Themen 5
B Objekte verschwinden beim Übersetzen Java Basics - Anfänger-Themen 5
L Beim Java Programmstart, mehrere Parameter über die Kommandozeile übergeben Java Basics - Anfänger-Themen 9
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
X Hilfe beim Übertragen in eine For-Schleife Java Basics - Anfänger-Themen 1
S Fehler beim Programm Java Basics - Anfänger-Themen 2
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
M String beim einlesen formatieren Java Basics - Anfänger-Themen 12
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
I InputStream beim zweiten Mal fehlerhaft Java Basics - Anfänger-Themen 10
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
C Brauche Hilfe beim Schreiben eines Programmes :/ Java Basics - Anfänger-Themen 1
cmn489 Werte beim Funktionsaufruf in ein Feld übertragen(falls dieses leer ist) Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben