2011-08-09 7 views
7

Mam kilka klas, które muszę być w stanie przedłużyć w ramach tego samego pakietu. Ale nie chcę, aby ktokolwiek poza moją paczką rozszerzał moje zajęcia. Klasy w innych pakietach muszą mieć możliwość wywoływania moich zajęć, więc nie mogę użyć "domyślnego".Czy mogę ograniczyć dziedziczenie do pakietu bez używania "domyślnego"?

Czy jest jakiś sposób (może za pośrednictwem interfejsu), że mogę to osiągnąć?

Odpowiedz

6

Zrobiłbym to, tworząc klasę podstawową o widoczności default, a następnie rozszerzając ją o klasę public final, do której klasy zewnętrzne mogą wywoływać, ale nie rozszerzać. Na przykład:

class MyBase { 
    public void doSomething() { ... } 
} 

public final class PublicBase extends MyBase { } 

class ExtendedBase { 
    @Override 
    public void doSomething() { ... } 
} 
7

Jeśli się pakiet konstruktorzy lokalny, może zostać przedłużony tylko w tym samym opakowaniu, jednak mogą być dostępne członkowie publiczne w jakiejkolwiek klasy, jeśli jest to publiczna klasy.

+2

Jest to świetne rozwiązanie, ponieważ pozwala również na wyświetlanie klasy podstawowej poza pakietem. – jzd

+0

Potrzebuję klas w innych pakietach, aby móc utworzyć instancję mojej klasy. Czy nie uniemożliwiłoby to wszystkim lokalnym konstruktorom? – Florian

+0

Można użyć metod fabrycznych, aby umożliwić ich utworzenie. –

0

Można utworzyć interfejs do użycia klasy i klasy fabrycznej, które zwrócą konkretne implementacje, które będą publiczne i dlatego będą widoczne poza pakietem. Następnie stwórz swoje konkretne klasy z domyślną widocznością.

Powiązane problemy