2017-05-21 1 views
1

Ich habe folgenden Code geschrieben. Kann ich auf die (nicht statische) Methode m1() der Klasse NestedClass2 ??Können wir auf die nicht statische Methode der nicht statischen geschachtelten Klasse aus der statischen verschachtelten Klasse zugreifen

class OuterClass 
{ 
    static class NestedClass 
    { 
    static class NestedClass1 
    { 
     class NestedClass2 
     { 
      void m1() 
      { 
      System.out.println("Non-static method of NestedClass2"); 
      } 
     } 
    } 
    } 
} 
+1

Wo möchten Sie darauf zugreifen wollen? –

+0

In Hauptmethode einer anderen Klasse. –

+0

Und wo ist die 'NestedClass4' (NC4)? Ist es ein eigenständiges Programm oder ist es auch in OuterClass eingebettet? –

Antwort

1

Um NestedClass2.m1() von einem anderen, unabhängigen Klasse aufrufen (in diesem Beispiel rufe ich es aus Main) Sie Instanzen von NestedClass1 und NestedClass2 erstellen müssen.

Im folgende Beispiel zu sehen, wie man eine non-static Klasseninstanz einer inneren Klasse erstellen (nc1.new NestedClass2()) gegenüber, wie eine static Instanz einer inneren Klasse (new OuterClass.NestedClass.NestedClass1()).

public class Main { 

    public static void main(String[] args) { 
     OuterClass.NestedClass.NestedClass1 nc1 = new OuterClass.NestedClass.NestedClass1(); 
     OuterClass.NestedClass.NestedClass1.NestedClass2 nc2 = nc1.new NestedClass2(); 
     nc2.m1(); 
    } 
} 
+0

Vielen Dank! –

+0

Gern geschehen. Fühlen Sie sich frei, meine Antwort zu akzeptieren (indem Sie v markieren) :-) –

0

eine innere Klasse zu instanziieren, müssen wir zunächst seine umschließende Klasse instanziiert. Erstellen Sie dann das innere Objekt innerhalb des äußeren Objekts mit dieser Syntax:

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

So

  1. Instanz NestedClass1 zuerst erstellen.
  2. Instanz von NestedClass2 mit der oben angegebenen Syntax erstellen.

    class AnyOtheClass { 
        public static void main(String args[]) 
        { 
         OuterClass.NestedClass.NestedClass1 objNestedClass1= new OuterClass.NestedClass.NestedClass1(); 
         OuterClass.NestedClass.NestedClass1.NestedClass2 objNestedClass2= objNestedClass1.new NestedClass2(); 
         objNestedClass2.m1(); 
        } 
    } 
    
Verwandte Themen