W tym samouczku dowiemy się o modyfikatorze dostępu Java, jego typach i sposobach ich używania na przykładach.
Co to są modyfikatory dostępu?
W Javie modyfikatory dostępu służą do ustawiania dostępności (widoczności) klas, interfejsów, zmiennych, metod, konstruktorów, składowych danych i metod ustawiających. Na przykład,
class Animal ( public void method1() (… ) private void method2() (… ) )
W powyższym przykładzie zadeklarowaliśmy 2 metody: method1 () i method2 (). Tutaj,
- method1 is
public
- Oznacza to, że mogą być dostępne dla innych klas. - method2 is
private
- Oznacza to, że inne klasy nie mogą uzyskać do niej dostępu.
Zwróć uwagę na słowo kluczowe public
i private
. To są modyfikatory dostępu w Javie. Są również znane jako modyfikatory widoczności.
Uwaga : nie można ustawić modyfikatora dostępu metod pobierających.
Rodzaje modyfikatorów dostępu
Zanim dowiesz się o typach modyfikatorów dostępu, upewnij się, że znasz pakiety Java.
W Javie istnieją cztery słowa kluczowe modyfikujące dostęp i są to:
Modyfikator | Opis |
Domyślna | deklaracje widoczne tylko w paczce (paczka prywatna) |
Prywatny | deklaracje są widoczne tylko w klasie |
Chroniony | deklaracje są widoczne w pakiecie lub we wszystkich podklasach |
Publiczny | deklaracje są widoczne wszędzie |
Domyślny modyfikator dostępu
Jeśli nie określimy jawnie żadnego modyfikatora dostępu do klas, metod, zmiennych itp., Wówczas domyślnie brany jest pod uwagę domyślny modyfikator dostępu. Na przykład,
package defaultPackage; class Logger ( void message()( System.out.println("This is a message"); ) )
Tutaj klasa Logger ma domyślny modyfikator dostępu. Klasa jest widoczna dla wszystkich klas należących do pakietu defaultPackage. Jeśli jednak spróbujemy użyć klasy Logger w innej klasie poza defaultPackage, otrzymamy błąd kompilacji.
Modyfikator dostępu prywatnego
Gdy deklarowane są zmienne i metody private
, nie można uzyskać do nich dostępu poza klasą. Na przykład,
class Data ( // private variable private String name; ) public class Main ( public static void main(String() main)( // create an object of Data Data d = new Data(); // access private variable and field from another class d.name = "Programiz"; ) )
W powyższym przykładzie zadeklarowaliśmy zmienną prywatną o nazwie name i metodę prywatną o nazwie display()
. Po uruchomieniu programu otrzymamy następujący błąd:
Main.java:18: error: name has private access in Data d.name = "Programiz"; ^
Błąd jest generowany, ponieważ próbujemy uzyskać dostęp do zmiennej prywatnej i metody prywatnej klasy Data z klasy Main.
Możesz się zastanawiać, co zrobić, jeśli potrzebujemy dostępu do tych prywatnych zmiennych. W tym przypadku możemy skorzystać z metody pobierającej i ustawiającej. Na przykład,
class Data ( private String name; // getter method public String getName() ( return this.name; ) // setter method public void setName(String name) ( this.name= name; ) ) public class Main ( public static void main(String() main)( Data d = new Data(); // access the private variable using the getter and setter d.setName("Programiz"); System.out.println(d.getName()); ) )
Wyjście :
Nazywam się Programiz
W powyższym przykładzie mamy prywatną zmienną o nazwie name. Aby uzyskać dostęp do zmiennej z klasy zewnętrznej, użyliśmy metod: getName()
i setName()
. W Javie metody te nazywane są pobierającymi i ustawiającymi.
W tym przypadku użyliśmy metody ustawiającej ( setName()
), aby przypisać wartość zmiennej oraz metody pobierającej ( getName()
), aby uzyskać dostęp do zmiennej.
Użyliśmy this
słowa kluczowego wewnątrz setName (), aby odnieść się do zmiennej klasy. Aby dowiedzieć się więcej na temat tego słowa kluczowego, odwiedź stronę Java this Keyword.
Uwaga : nie możemy deklarować klas i interfejsów jako prywatnych w Javie. Jednak klasy zagnieżdżone można zadeklarować jako prywatne. Aby dowiedzieć się więcej, odwiedź stronę Java Nested and Inner Class.
Modyfikator dostępu chronionego
Po zadeklarowaniu metod i członków danych protected
możemy uzyskać do nich dostęp w ramach tego samego pakietu, jak również z podklas. Na przykład,
class Animal ( // protected method protected void display() ( System.out.println("I am an animal"); ) ) class Dog extends Animal ( public static void main(String() args) ( // create an object of Dog class Dog dog = new Dog(); // access protected method dog.display(); ) )
Wyjście :
Jestem zwierzęciem
W powyższym przykładzie mamy chronioną metodę o nazwie display()
wewnątrz klasy Animal. Klasa Animal jest dziedziczona przez klasę Dog. Aby dowiedzieć się więcej o dziedziczeniu, odwiedź stronę Dziedziczenie języka Java.
Następnie stworzyliśmy psa obiektowego z klasy Dog. Korzystając z obiektu próbowaliśmy uzyskać dostęp do chronionej metody klasy nadrzędnej.
Ponieważ dostęp do metod chronionych można uzyskać z klas potomnych, możemy uzyskać dostęp do metody klasy Animal z klasy Dog.
Uwaga : nie możemy deklarować klas ani interfejsów protected
w Javie.
Modyfikator dostępu publicznego
Gdy deklarowane są metody, zmienne, klasy itp. public
, Możemy uzyskać do nich dostęp z dowolnego miejsca. Modyfikator dostępu publicznego nie ma ograniczenia zakresu. Na przykład,
// Animal.java file // public class public class Animal ( // public variable public int legCount; // public method public void display() ( System.out.println("I am an animal."); System.out.println("I have " + legCount + " legs."); ) ) // Main.java public class Main ( public static void main( String() args ) ( // accessing the public class Animal animal = new Animal(); // accessing the public variable animal.legCount = 4; // accessing the public method animal.display(); ) )
Wyjście :
Jestem zwierzęciem. Mam 4 nogi.
Tutaj,
- Dostęp do publicznej klasy Animal uzyskuje się z klasy Main.
- Dostęp do zmiennej publicznej legCount można uzyskać z klasy Main.
display()
Dostęp do metody publicznej uzyskuje się z klasy Main.
Modyfikatory dostępu Podsumowane na jednym rysunku

Modyfikatory dostępu są używane głównie do hermetyzacji. Mogę pomóc nam kontrolować, która część programu ma dostęp do członków klasy. Aby można było zapobiec niewłaściwemu wykorzystaniu danych. Aby dowiedzieć się więcej o enkapsulacji, odwiedź stronę Java Encapsulation.