Pytanie Jak chronić klasy, aby nie były widoczne poza pakietem


Chciałbym mieć w swoim pakiecie dwie "chronione" klasy. Oznacza to, że nie chcę, aby pliki znajdujące się poza moją paczką postrzegały je jako widoczne - będą tylko do użytku wewnętrznego w ramach pakietu.

Jak mogę to zrobić?


40
2018-03-28 21:56


pochodzenie




Odpowiedzi:


Po prostu pomiń wszystkie słowa kluczowe. Domyślna widoczność to pakiet-prywatny, widoczne tylko w pakiecie.

na przykład.:

// class Foo is public
public class Foo
{
    final private Bar bar = ...;
}

// class Bar is package-private
// (visible to all classes in the package, not visible outside the package)
class Bar
{
    ...;
}

77
2018-03-28 21:58



Dokładnie. Słowo kluczowe protected oznacza, że ​​jest dostępne tylko dla typów pochodnych - Oskar Kjellin
@Oskar: cóż, technicznie wygląda na to, że chroniony jest widoczny dla typów pochodnych na zewnątrz pakiet, oraz wszystko typy wewnątrz paczki. - Jason S
Z pewnością klasy poza pakietem Bar nie widzą nawet klasy Bar, więc nie mogą jej rozszerzyć. (Co się stanie, jeśli klasa publiczna w pakiecie rozszerzy ją jednak ...?) - Bennett McElwee
Jakson S, masz absolutną rację, wszystkie poziomy dostępu obejmują siebie nawzajem w kolejności. prywatny umożliwia dostęp w obrębie klasy, pakiet-prywatny (domyślnie) umożliwia dostęp w obrębie pakietu i w klasie chroniony umożliwia dostęp dla klas potomnych innych pakietów i w ramach pakietu publiczny pozwala cokolwiek uzyskać dostęp, a więc obejmuje wszystkie inne poziomy. Bennett McElwee, chronieni członkowie pozostają chronieni, chyba że są metodami i są nadpisywani. Ale nawet wtedy byłaby overriden metoda, która może być dostępna. - Malcolm
Jeśli nie chcesz, aby jakakolwiek inna klasa dziedziczyła, możesz dodać public final, to pozwala ci korzystać z klasy, ale każda klasa może dziedziczyć - kelgwiin