Czy "package private" member access nie jest równoznaczne z domyślnym (bez modyfikatora) dostępem?
Jestem trochę zdezorientowany pojęciem "pakiet prywatny", którego używa część dokumentacji, wraz z użyciem " domyślnego dostępu."Czy package-private I default access nie są równoznaczne z protected?
7 answers
Tak, to prawie to samo. Modyfikator protected określa, że członek może być dostępny tylko w jego własnym pakiecie (tak jak w pakiecie-private), a DODATKOWO, przez podklasę jego klasy w innym pakiecie.
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
2011-03-24 07:37:20
"domyślnym" modyfikatorem dostępu (takim, w którym żaden z nich nie jest jawnie podany) jest "pakiet-prywatny", co oznacza, że tylko rzeczy z tego samego pakietu mogą do nich uzyskać dostęp. Jednak bycie w tym samym pakiecie nie oznacza nic o relacji dziedziczenia między klasami - jest to czysto nazewnicza konwencja.
"Protected" oznacza, że nie tylko klasy w tym samym pakiecie, ale także podklasy (niezależnie od tego, w którym pakiecie znajdują się te podklasy) będą miały do niego dostęp.
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
2011-03-24 07:48:56
Domyślny Dostęp dla klas to package-private, jednak domyślny Dostęp dla członków interface jest publiczny.
Np.
public interface I {
int A = 1;
// same as
public static final int A = 1;
void method();
// same as
public abstract void method();
class C { }
// same as
public static class C { }
}
Domyślne reguły dostępu dla interfejsów nie są takie same jak dla klas.
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
2011-03-24 09:00:00
Package-private I default access to synonimy. Obiekt może również uzyskać dostęp do chronionego członka obiektów, których klasy znajdują się w tym samym pakiecie. Obiekt może również uzyskać dostęp do chronionego członka swoich superklas bez warunku dotyczącego ich pakietu. Jako konkretny przykład :
package ab;
class A {
protected void foo() {}
void dd(){}
}
class C {
void aa(){
A a = new A();
a.foo(); //legal
a.dd(); //legal
}
}
package sub;
class D extends A{
void ac(){
foo(); //legal ..
dd(); //illegal.. because dd has default access..
}
class E {
void ee(){
A a = new A();
a.foo(); //illegal
a.dd(); //illegal
}
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-09-07 12:52:01
'Pakiet prywatny' i domyślny dostęp są takie same. We wczesnych wydaniach kompilatora około 1.1.2/3,' pakiet 'był dozwolonym modyfikatorem, ale ignorowany, co oznacza to samo, co brak modyfikatora, tzn. 'pakiet prywatny'. Wkrótce potem pojawiła się krótkotrwała moda na umieszczanie /*package*/
(jako komentarza) w takich sytuacjach. Podobnie w tym czasie można było deklarować rzeczy jak zsynchronizowane klasy, chociaż znowu nie było rzeczywistego efektu semantycznego.
Żaden z nich nie jest taki sam jak "chroniony", który rozszerza się na klasy pochodne w innych pakietach.
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-05-03 17:24:13
From Java Language Spec
- 6.6.5 przykład: Default-Access Fields, Methods, and Constructors If żaden z modyfikatorów dostępu publiczny, chronione lub prywatne są określone, a członkiem klasy lub konstruktorem jest dostępny w całym pakiecie, który zawiera deklarację klasy w którym deklarowany jest członek klasy, ale członek klasy lub konstruktor jest niedostępny w żadnym innym opakowaniu.
Jeśli Klasa publiczna posiada metodę lub konstruktor z domyślnym dostępem, wtedy ta metoda lub konstruktor nie jest dostępne lub dziedziczone przez podklasa zadeklarowana poza tym pakietem
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
2011-03-24 07:47:04
Domyślne i package-private są takie same, co oznacza, że mogą być używane przez dowolną klasę, dopóki nie znajdą się w tym samym pakiecie.
Termin package-private w rzeczywistości jest określany w znaczeniu modyfikatora private jako private oznacza, że jest dostępny tylko w tej samej klasie i żadne inne klasy lub podklasy nie mogą uzyskać do niego dostępu w tym samym pakiecie lub bez niego.
Stąd package-private oznacza to samo co default .
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
2016-06-23 09:34:53