Widziałem odniesienia do modyfikatora dostępu w Javie o nazwie private protected
(oba słowa razem):
private protected someMethod() {
}
Jedna ze stron, które odnalazłem, jest tutaj . Moja lekcja szkolna również odnosiła się do tego modyfikatora dostępu (i powiedziała, że istnieje). Użycie go powoduje jednak błąd w języku Java.
Próbowałem zarówno ze zmiennymi, jak i metodami i jestem prawie pewien, że nie istnieje, ale chcę wyjaśnić, co się stało. Czy został rozważony, a następnie odrzucony? A może został usunięty w nowszej wersji Java?
Edycja: nie szukam informacji o protected
słowie kluczowym.
private protected
modyfikatorze.private protected
w tej odpowiedzi jest odniesienie do , ale nie wyjaśnia, dlaczego ani co się z nią stało, czego dotyczy to pytanie.Odpowiedzi:
Usunięcie modyfikatora dostępu
Java pierwotnie miała
private protected
modyfikator, ale został on usunięty w JDK 1.0.2 (pierwsza stabilna wersja, Java 1.0, którą znamy dzisiaj). Kilka samouczków dotyczących JDK 1.0.2 ( tutaj i tutaj ) mówi, co następuje:Inna odpowiedź na SoftwareEngineering.SE brzmi:
Teraz spójrz na historię wersji Java :
Z tego możemy wywnioskować, że samouczki dotyczące wersji 1.0.2 odnoszą się do pierwszej wersji JDK 1.0, w której język nazywał się Oak, ale ten z SoftwareEngineering.SE odnosi się do pierwszej stabilnej wersji, JDK 1.0.2 zwanej Java 1.0, gdzie został usunięty.
Teraz, jeśli spróbujesz wyszukać go w dokumentacji Java 1.0 , nie znajdziesz go, ponieważ jak wspomniano wcześniej, został usunięty w JDK 1.0.2, znanym również jako Java 1.0. Jest to ponownie udowodnione, gdy spojrzysz na czasy ostatniej modyfikacji dla opublikowanego linku. Opublikowane łącze zostało ostatnio zmodyfikowane w lutym 1996 r.
private protected
Usunięta Java 1.0 / JDK 1.0.2 została wydana po lutym 1996 r. , A zgodnie ze specyfikacją w sierpniu 1996 r.Przyczyna usunięcia
Niektóre źródła wyjaśniają również powód
private protected
, na przykład ten . Cytować:SoftwareEngineering.SE również to wspiera, mówiąc, że nie było warte niespójności i dodatkowej złożoności, więc zostało wcześnie usunięte.
Interpretacja
Moja interpretacja tego wszystkiego jest taka, że być może w czasach dębu obaj mogli współistnieć (stąd ta kombinacja). Ponieważ
protected
znaczenie zmieniło się 1 , może zaistnieć potrzeba przyzwoleniaprivate
iprotected
w tym samym czasie. Wprowadzenie stało się zbyt skomplikowane i nie było tego warte, a zatem ostatecznie zostało porzucone. Zanim pojawiła się Java 1.0 / JDK 1.0.2, została usunięta i dlatego nie można jej znaleźć w dokumentacji.1 W specyfikacji języka Oak , sekcja 4.10, Dostęp do zmiennych i metod , zauważono, że domyślnym modyfikatorem był
protected
:To jest zupełnie inne niż to, co mamy dzisiaj, domyślny dostęp do pakietu. Mogło to utorować drogę potrzebom
private protected
, ponieważprivate
było zbyt restrykcyjne iprotected
zbyt łagodne.źródło
Early on, the Java language allowed for certain combinations of modifiers,
Czy to oznacza, że było coś więcej niż tylko „Ochrona prywatna”?Istnieją mylące / niejasne historie:
Jedna, pochodząca ze źródła Princeton, a także z archiwów MIT , stwierdza, że:
Ale ta funkcja nie jest określona w żadnej oficjalnej dokumentacji Java 1.0 tutaj ani tutaj .
Domyślam się, że ta funkcja nie dotarła do oficjalnej wersji 1.0, ponieważ oficjalna specyfikacja języka pochodzi z sierpnia 1996 roku, a źródło w Princeton zostało ostatnio zmodyfikowane w lutym 1996 roku .
PS: szkoda Oracle za usunięcie archiwów dla starszych wersji.
źródło
Jak sugeruje link, który podałeś w swoim pytaniu,
private protected
został użyty welement/member
klasie, kiedy chceszsubclass
mieć dostęp do elementu, ale ukryć go przed innymi klasami w jegopackage
.Java
w porównaniu doC++
ma dodatkową koncepcję hermetyzacji elementów - i jest to pakiet . Trzeba też zrozumieć, co jest dostępne w obrębie lub poza pakietem wJava
jeśli chodzi o tych dostępowych-specyfikatorami jakprivate
,public
iprotected
.Zwróć uwagę, że wyjaśniłem, dlaczego został użyty. Oczywiście nie w aktualnej wersji
źródło
Nie, nie można używać zarówno razem. Twój tutorial jest dziwny. To, co masz, to tak zwany pakiet prywatny lub chroniony dostęp do pakietu w odniesieniach ot6. Jest to domyślny dostęp, który jest włączony, gdy żaden kwalifikator acc6 nie jest zapisany jawnie.
private
protected
źródło
Zakres prywatny obejmuje istniejącą klasę. Gdzie Protected można uzyskać dostęp w ramach pakietu i klasy rozszerzony o klasy w innych pakietach.
Bezproblemowo, jeśli chcesz, aby zmienna / metody były dostępne poza pakietem, musisz zdefiniować jako chronione / publiczne, w przeciwnym razie prywatne lub inne specyfikatory dostępu.
Metody chronione są zwykle dostępne z zewnątrz pakietu oraz wewnątrz podklas, tj. Klasa musi rozszerzyć odpowiednią klasę, aby korzystać z chronionych zdefiniowanych metod.
Prywatne metody / zmienne mają zakres wewnątrz klasy i nie mogą być dostępne poza klasą.
Dlatego nie możesz jednocześnie zdefiniować funkcji Private Protected!
źródło