2013-06-19 5 views
12

Ich habe innere Klasse in meinem Code. Ich möchte seinen Instanzen öffentlichen Zugriff gewähren, aber nur die äußere Klasse sollte in der Lage sein, diese Instanzen zu erstellen, wie im "privaten" Zugriff. Ist es möglich, ohne ein richtig kleines Paket zu machen (oder eine öffentliche Schnittstelle für jede solche innere Klasse zu erstellen)?Java - Innerer Klassenkonstruktor - nur für die äußere Klasse erlaubt

(Sorry, wenn mein Englisch ist schlecht: P)

Antwort

23

Es ist möglich. Deklarieren Sie Ihre innere Klasse public, aber ihr Konstruktor private. Auf diese Weise können Sie es nur innerhalb Ihrer einschließenden Klasse und selbst, aber nicht von außen erstellen.

+1

Wirklich äußere Klasse haben Zugang zu privaten Bereich der inneren Klasse? Gut zu wissen, ob es funktioniert, danke! –

+0

Also ist diese Lösung falsch? –

+1

Nein, diese Lösung ist richtig, die äußere Klasse kann alle privaten Felder, Methoden und Konstruktoren der inneren Klassen sehen. – WilQu

1

standardmäßig Wenn Sie die Instanz der inneren Klasse erhalten möchten, müssen zuerst die äußere Klasse haben.

Ein inner class ist ein Mitglied seiner einschließenden Klasse.

Sie müssen nichts dafür tun.

Nicht-statische verschachtelte Klassen (innere Klassen) der Zugang zu anderen Mitgliedern der umgebenden Klasse haben, auch wenn sie privat deklariert sind

Ich hoffe, dass ich Ihre Frage in der richtigen Art und Weise zu verstehen.

Bitte refer.

+0

Constructor sollte verfügbar sein, dies nur für die äußere Klasse (so kann nicht öffentlich), aber es sollte möglich sein, zu verwenden, Objekt aus dem Äußeren (also Klasse kann nicht privat sein). –

0

So machen private der inneren Klasse.

public class Outer { 
    private class Inner {} 
     public String foo() { 
      return new Inner().toString(); 
     } 
} 

Sie können rechtlich nicht den privaten Standardkonstruktor nennen, weil es privat ist

+0

Wenn Inneres privat ist, kann ich das nicht aus dem Äußeren heraus verwenden. Ich kann eine öffentliche Schnittstelle für diese Klasse erstellen, aber ich möchte diese Lösung vermeiden, wenn die bessere existiert. –

+0

Es ist die Lösung Ihrer Frage 'nur die äußere Klasse sollte diese Instanzen erstellen können'. kannst du deine frage ausarbeiten was willst du wirklich !! Es ist nicht klar. – iMBMT

+0

Nur das 'Outer'-Objekt sollte Zugriff auf Konstrukte von 'Inner' haben. Ist es jetzt klar? Es tut uns leid :) –

Verwandte Themen