Jaki jest domyślny modyfikator dostępu w Javie? [duplikat]
To pytanie ma już odpowiedź tutaj:
- który jest domyślnym określnikiem dostępu w Javie? 12 odpowiedzi
Jaki jest domyślny modyfikator dostępu dla metody lub zmiennej instancji, jeśli nie podam jej jawnie?
Na przykład:
package flight.booking;
public class FlightLog
{
private SpecificFlight flight;
FlightLog(SpecificFlight flight)
{
this.flight = flight;
}
}
Czy modyfikator dostępu tego konstruktora jest chroniony czy pakiet? Czy inne klasy w ten sam pakiet, którym jest flight.booking
, nazywa ten konstruktor?
13 answers
From Java documentation
Jeśli klasa nie ma modyfikatora (domyślnego, znanego również jako package-private), jest widoczna tylko w jej własnym pakiecie (pakiety są nazwane grupami powiązanych klas - dowiesz się o nich w dalszej lekcji.)
W member level
, Możesz również użyć modyfikatora publicznego lub no modifier
(pakiet-prywatny), tak jak w przypadku klas najwyższego poziomu i o tym samym znaczeniu.
Pełny artykuł można przeczytać tutaj (który napisałem ostatnio):
http://codeinventions.blogspot.com/2014/09/default-access-modifier-in-java-or-no.html
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-15 10:53:42
Z dokumentacji:
Access Levels
Modifier Class Package Subclass World
-----------------------------------------------------
public Y Y Y Y
protected Y Y Y N
(Default) Y Y N N
private Y N N N
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-15 11:02:34
To zależy od kontekstu.
Gdy jest w obrębie klasy:
class example1 {
int a = 10; // This is package-private (visible within package)
void method1() // This is package-private as well.
{
-----
}
}
Gdy jest w interfejsie:
interface example2 {
int b = 10; // This is public and static.
void method2(); // This is public and abstract
}
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-15 10:58:05
Domyślnym modyfikatorem dostępu jest package-private-widoczny tylko z tego samego pakietu
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
2013-04-23 08:50:55
Oto przykład kodu, który powinien to podsumować dla Ciebie... Oprócz poniższego, pokazującego, jak nie można uzyskać dostępu do domyślnego w innym pakiecie, jest jeszcze jedna rzecz.
Domyślnie nie jest dostępna w podklasie, jeśli klasa, która ją podklasuje, znajduje się w innym pakiecie, ale jest dostępna, jeśli podklasa jest w tym samym pakiecie.
package main;
public class ClassA {
private int privateVar;
public int publicVar;
int defaultVar;
}
package main;
public class ClassB {
public static void main(String[] args) {
ClassA a = new ClassA();
int v1 = a.publicVar; // Works
int v2 = a.defaultVar; // Works
int v3 = a.privateVar; // Doesn't work
}
}
package other;
public class ClassC {
public static void main(String[] args) {
ClassA a = new ClassA();
int v1 = a.publicVar; // Works
int v2 = a.defaultVar; // Doesn't work
int v3 = a.privateVar; // Doesn't work
}
}
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-15 11:00:06
Domyślnym modyfikatorem jest package
. Tylko kod w tym samym pakiecie będzie mógł wywołać ten konstruktor.
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-15 10:54:23
Tak, jest widoczny w tym samym opakowaniu. Nic poza tym pakietem nie będzie miało do niego dostępu.
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-15 11:05:19
Modyfikatorem dostępu twojego konstruktora będzie package-private(domyślnie) . Jak zadeklarowałeś klasę public, będzie ona widoczna wszędzie, ale konstruktor tego nie zrobi. Twój konstruktor będzie widoczny tylko w jego pakiecie.
package flight.booking;
public class FlightLog // Public access modifier
{
private SpecificFlight flight;
FlightLog(SpecificFlight flight) // Default access modifier
{
this.flight = flight;
}
}
Jeśli nie napiszesz żadnego konstruktora w swojej klasie, kompilator wygeneruje domyślny konstruktor z tym samym modyfikatorem dostępu klasy. W poniższym przykładzie kompilator wygeneruje domyślny konstruktor z public modyfikator dostępu (taki sam jak Klasa).
package flight.booking;
public class FlightLog // Public access modifier
{
private SpecificFlight flight;
}
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-15 10:57:15
Domyślnym modyfikatorem dostępu jest package-private (tzn. domyślnie) i jest widoczny tylko z tego samego pakietu.
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
2013-04-23 09:26:52
Czy modyfikator dostępu tego konstruktora jest chroniony czy pakiet?
Myślę, że w domyśle modyfikator dostępu dla konstruktorów byłby modyfikatorem dostępu dla twojej klasy. ponieważ twoja klasa ma publiczny dostęp, konstruktor będzie miał publiczny dostęp bezwarunkowo
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
2013-04-23 08:50:23
Domyślny modyfikator dostępu - jeśli klasa nie ma modyfikatora (domyślny, znany również jako package-private), jest widoczny tylko w jej własnym pakiecie (pakiety są nazwane grupami powiązanych 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
2014-04-21 05:38:06
Nie, Nie można wywołać domyślnego poziomu dostępu do innego pakietu. Ale masz dostęp w paczce. Kliknij ten link aby uzyskać więcej szczegółów.
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-15 11:00:33
Z książki OCA Java SE 7 Programmer I :
Członkowie klasy zdefiniowanej bez użycia jawnego dostępu modyfikatory są definiowane za pomocą dostępności pakietu (nazywanego również domyślnym dostępność). Członkowie z dostępem do pakietu są dostępni tylko dla klasy i interfejsy zdefiniowane w tym samym 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
2017-01-15 11:04:43