2017-04-15 3 views
1

Sagen wir, ich habe eine äußere Klasse und eine innere Klasse. Ist es möglich, eine innere Klassenmethode zu schreiben, so dass nur auf die äußere Klasse und nicht auf Klassen zugegriffen werden kann, die außerhalb der äußeren Klasse definiert sind, z. MyForeignClass?Können Sie eine Methode einer inneren Klasse nur für die äußere Klasse zugänglich machen?

class MyForeignClass { 
    MyForeignClass() { 
     MyOuterClass instance = new MyOuterClass(); 
     MyInnerClass innerClassInstance = instance.getMyInnerClassInstance(); 
     // illegal method call, only MyOuterClass can call this 
     innerClassInstance.privateInnerClassMethod(); 
    } 
} 

class MyOuterClass { 
    class MyInnerClass { 
     MyInnerClass() {} 
     void publicInnerClassMethod() { 
      // accessible from outside MyOuterClass 
     } 
     void privateInnerClassMethod() { 
      // accessible from inside MyOuterClass 
     } 
    } 

    MyInnerClass instance; 

    MyOuterClass() { 
     instance = new MyInnerClass(); 
     instance.privateInnerClassMethod(); 
    } 

    MyInnerClass getMyInnerClassInstance() { 
     return instance; 
    } 

} 
+8

Machen Sie es ... privat? –

+0

Deklarieren Sie die innere Klasse als private Klasse. –

+1

@GlenPierce nein, weil 'publicInnerClassMethod' sollte "von außerhalb MyOuterClass zugänglich sein". Die Klasse "privat" auszuschließen, schließt das aus. –

Antwort

4

Wenn Sie die Methoden der inneren Klasse als privat definieren, können Sie nur von der inneren und äußeren Klasse aus zugreifen.

class MyOuterClass 
{ 
    class MyInnerClass 
    { 
     private void doSomething(){} 
    } 
} 

Wenn Sie das obige Verfahren aus einer anderen Klasse nennen versucht, aber MyInnerClass oder MyOuterClass Sie einen Fehler würden, weil keine andere Klasse würde wissen, wo diese Instanz des Verfahrens kam from.Hope das hilft :)

+0

Wahr in der Tat, ich werde das als Teil meiner Antwort hinzufügen – Aaron

+1

Fertig * Daumen hoch * – Aaron

+0

Danke für die Erklärung @Aaron :) – visc

Verwandte Themen