2013-06-19 11 views
12

Mam wewnętrzną klasę w moim kodzie. Chcę dać publiczny dostęp do jego instancji, ale tylko klasa zewnętrzna powinna móc tworzyć takie instancje, jak w "prywatnym" dostępie. Czy jest to możliwe bez zrobienia właściwie małego pakietu (lub stworzenia publicznego interfejsu dla każdej takiej wewnętrznej klasy)?Java - Konstruktor klasy wewnętrznej - dozwolona tylko dla klasy zewnętrznej

(Przepraszam, jeśli mój angielski jest zły: P)

Odpowiedz

23

To jest możliwe. Zadeklaruj swoją publiczną klasę , ale jej konstruktorem jest prywatny. W ten sposób możesz stworzyć go tylko wewnątrz swojej klasy i siebie, ale nie z zewnątrz.

+1

Czy naprawdę klasa zewnętrzna ma dostęp do prywatnego pola klasy wewnętrznej? Dobrze wiedzieć, czy to działa, dzięki! –

+0

Więc to rozwiązanie jest złe? –

+1

Nie, to rozwiązanie jest poprawne, klasa zewnętrzna może widzieć wszystkie prywatne pola, metody i konstruktory klas wewnętrznych. – WilQu

1

Domyślnie, jeśli chcesz uzyskać wystąpienie wewnętrznej klasy trzeba mieć pierwszą klasę kosmicznej.

A inner class jest członkiem swojej klasy obejmującej.

Nie musisz nic robić.

dla statycznych klas zagnieżdżonych (klasy wewnętrzne) mają dostęp do innych członków klasy okalającego, nawet jeśli są one uznane za prywatne

Mam nadzieję, że zrozumiał swoje pytanie w odpowiedni sposób.

Proszę refer.

+0

Konstruktor powinien być dostępny tylko dla klasy zewnętrznej (więc nie mogą być publiczne), ale powinno być możliwe, aby korzystać z tego obiekt z zewnątrz (więc klasa nie może być prywatna). –

0

Wykonaj więc private z klasy wewnętrznej.

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

nie można legalnie nazwać prywatną domyślnego konstruktora, ponieważ jest prywatny

+0

Gdy Wewnętrzna jest prywatna, nie mogę jej użyć z zewnątrz. Mogę utworzyć interfejs publiczny specyficzny dla tej klasy, ale chcę tego rozwiązania unikać, jeśli jest lepszy. –

+0

To jest rozwiązanie twojego pytania "tylko zewnętrzna klasa powinna być w stanie stworzyć te instancje". możesz rozwinąć swoje pytanie, czego naprawdę chcesz! to nie jest jasne. – iMBMT

+0

Tylko obiekt 'Outer' powinien mieć dostęp do konstruowania instancji' Inner'. Czy teraz jest jasne? Przepraszam :) –

Powiązane problemy