Czy Java ma modyfikator dostępu "private protected"?
Widziałem pewne odniesienia do modyfikatora dostępu w Javie o nazwie private protected
(oba słowa Razem):
private protected someMethod() {
}
Jedna ze stron, które znalazłem odnosi się do tego jest tutaj . Moja lekcja w szkole również odnosiła się do tego modyfikatora dostępu (i powiedziała, że istnieje). Używanie go powoduje jednak błąd w języku Java.
Próbowałem zarówno zmiennych, jak i metod i jestem prawie pewien, że nie istnieje, ale chcę wyjaśnienia tego, co się stało. Czy zostało to rozważone, a następnie odrzucone? Lub czy został usunięty w nowszej wersji Javy?
Edit: nie szukam informacji o słowie kluczowym protected
.
5 answers
Usunięcie modyfikatora dostępu
Java pierwotnie miała modyfikator private protected
, 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:
Uwaga: Wersja 1.0 języka Java obsługiwała pięć poziomów dostępu: cztery wymienione powyżej oraz
private protected
. Poziom dostępuprivate protected
nie jest obsługiwany w wersjach Java wyższych niż 1.0; nie powinieneś już używać go w swoich programach Java.
Kolejna odpowiedź na SoftwareEngineering.SE Stany:
Java pierwotnie miała taki modyfikator. Został napisany
private protected
, ale usunięty w Javie 1.0.
Teraz spójrz na historię wersji Javy :
JDK 1.0
Pierwsza wersja została wydana 23 stycznia 1996 roku i nosiła nazwę Oak. pierwsza stabilna wersja, JDK 1.0.2, nazywa się Java 1.
Z tego możemy wywnioskować, że tutoriale dotyczące wersji 1.0.2 odnoszą się do pierwszej wersji, JDK 1.0, gdzie język nazywał się Oak, ale ten z SoftwareEngineering.SE odnosi się do pierwszej stabilnej wersji JDK 1.0.2 o nazwie Java 1.0, gdzie została usunięta.
Teraz, jeśli spróbujesz poszukać go w dokumentacji Java 1.0 , nie znajdziesz go, ponieważ jak wspomniano wcześniej, został usunięty w JDK 1.0.2, w przeciwnym razie znany jako Java 1.0. Jest to ponownie udowodnione, gdy patrzysz na czasy "Ostatnio zmodyfikowane" dla linku, który opublikowałeś. Link został ostatnio zmodyfikowany w lutym 1996 roku. Java 1.0/JDK 1.0.2, kiedy private protected
została usunięta, została wydana po lutym 1996 roku, a zgodnie ze specyfikacją, w sierpniu 1996 roku.
Powód usunięcia
Niektóre źródła wyjaśniają również przyczynę private protected
, np. ten . Cytat:
Co było prywatne chroniona?
Na początku język Java pozwalał na pewne kombinacje modyfikatorów, z których jednym było
private protected
. Znaczeniemprivate protected
było ograniczenie widoczności wyłącznie do podklas (i usunięcie dostępu do pakietu). Zostało to później uznane za nieco niespójne i zbyt złożone i nie jest już wspierane.[5][5] znaczenie modyfikatora
protected
zmieniło się w wydaniu Javy Beta2, a kombinacjaprivate protected
pojawiła się w tym samym czasie. Łatali jakiś potencjał dziury w zabezpieczeniach, ale wielu ludzi zdezorientowało.
I SoftwareEngineering.SE wspiera to również, mówiąc, że nie było warte niespójności i dodatkowej złożoności, więc zostało usunięte na początku.
Interpretacja
Moja interpretacja tego wszystkiego jest taka, że być może, w czasach dębu, obaj mogli współistnieć (stąd kombinacja). Odkąd protected
Znaczenie się zmieniło1, możliwe, że konieczne było zezwolenie private
i protected
w tym samym czasie. Wprowadzenie stało się zbyt skomplikowane i nie było tego warte, a więc został w końcu porzucony. W czasie, gdy Java 1.0/JDK 1.0.2 się rozeszła, została upuszczona i dlatego nie można jej znaleźć w dokumentacji.
1w specyfikacji językaOak , sekcja 4.10, dostęp do zmiennych i metod , zauważono, że domyślnym modyfikatorem był protected
:
Domyślnie wszystkie zmienne i metody w klasie są chronione .
Różni się to od tego, co mamy dzisiaj, domyślnego dostępu do pakietu. Mogło to utorować drogę potrzebom private protected
, ponieważ private
było zbyt restrykcyjne i protected
było zbyt pobłażliwe.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-13 12:45:55
Są mylące / niejasne historie:
Jeden, ze źródła Princeton, które umieściłeś, a także z archiwum MIT, stwierdza, że:
Uwaga: Wersja 1.0 języka Java obsługiwała pięć dostępu poziomy: cztery wymienione powyżej plus prywatne chronione. The private protected access level nie jest obsługiwany w wersjach Java higher niż 1.0; nie powinieneś już go używać w swoich programach Java.
Ale ta funkcja nie jest określona na żadnym oficjalna dokumentacja Javy 1.0 tutaj lub 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 Princeton zostało Ostatnio zmodyfikowane w lutym 1996 roku.
PS: szkoda Oracle za usuwanie archiwów dla starszych wersji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-03 18:18:13
Ponieważ link podany w pytaniu sugeruje, że private protected
został użyty na element/member
klasy, kiedy chcesz, aby twoja subclass
miała dostęp do elementu, ale nie ukrywała go przed innymi klasami w jego package
.
Java
jeśli w porównaniu do C++
ma dodatkową koncepcję elementów hermetycznych - A jest to Pakiet. Należy również zrozumieć, co jest dostępne wewnątrz lub poza pakietem w Java
, jeśli chodzi o te specyfiki dostępu, takie jak private
, public
& protected
.
Proszę zauważyć, że wyjaśniłem, dlaczego został użyty. Nie w bieżącej wersji oczywiście
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-01 08:38:18
Nie, Nie Można używać obu private
a protected
razem. Twój tutorial jest dziwny. To, co masz, to tzw. pakiet prywatny lub w referencjach ot6 pakiet chroniony dostęp. Jest to domyślny dostęp, który jest włączony, gdy kwalifikator acc6 nie jest napisany jawnie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-02 18:28:22
Private scope jest połączeniem istniejącej klasy. W którym chroniony może być dostęp w pakiecie i klasy rozszerzone o klasy w innych pakietach.
Bezproblemowo je ¶ li chcesz, aby Twoja zmienna / metody by3y dostêpne poza pakietem, musisz zdefiniowaæ jako protected / public inaczej private lub inne specifiiers dostêpu.
Protected methods są zwykle dostępne z zewnątrz pakietu i wewnątrz podklas, tzn. klasa musi rozszerzyć odpowiednią klasę, aby skorzystać z protected defined metody.
Prywatne metody / zmienne mają zakres wewnątrz klasy.Nie mogą być dostępne poza klasą.
Dlatego nie możesz jednocześnie zdefiniować Private Protected!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-29 15:41:01