Перейти к контенту

Модификаторы доступа Java – Public, Private, Protected

Во время работы с Java встречаются public, protected and private — это модификаторы доступа. Модификатор доступа в Java(Access Modifiers) ограничивает доступ к классу, конструктору, данным и методам в другом классе. Есть четыре типа:

  1. default
  2. private
  3. protected
  4. public

модификаторы доступа в Java

 

Модификатор доступа по умолчанию

Если не упоминается какой-либо модификатор доступа, он называется модификатором доступа по умолчанию. Область применения ограничена только пакетом.

Это означает, что если у нас есть класс в пакете, то только те классы, которые находятся в этом пакете, могут обращаться к этому классу.

Никакой другой класс за пределами этого пакета не может получить доступ к этому классу. Точно так же, если у нас есть метод или элемент данных по умолчанию в классе, он не будет виден в классе другого пакета.

Пример модификатора доступа по умолчанию в Java

В этом примере у нас есть два класса, класс Test пытается получить доступ к методу по умолчанию класса Addition, поскольку класс Test принадлежит другому пакету, эта программа выдаст ошибку компиляции, поскольку область действия модификатора по умолчанию ограничена одним и тем же пакетом в котором он объявлен.

Addition.java

package abcpackage;

public class Addition {
   /* Так как здесь мы не упомянули модификатор доступа,
     * он считается по умолчанию.
    */
   int addTwoNumbers(int a, int b){
	return a+b;
   }
}

Test.java

package xyzpackage;

/*  Мы импортируем abcpackage
  * но все равно мы получим ошибку, потому что
  * класс, который мы пытаемся использовать, имеет доступ по умолчанию
 */
import abcpackage.*;
public class Test {
   public static void main(String args[]){
	Addition obj = new Addition();
        /* Это вызовет ошибку, потому что мы пытаемся получить доступ
          * метод по умолчанию в другом пакете
         */
	obj.addTwoNumbers(10, 21);
   }
}

Вывод:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method addTwoNumbers(int, int) from the type Addition is not visible
at xyzpackage.Test.main(Test.java:12)

наглядная таблица модификаторов доступа
чем отличаются модификаторы доступа

Модификатор личного(private) доступа

Область применения модификатора private ограничена только классом.

  1. Методы доступны только внутри класса.
  2. Класс и интерфейс не могут быть объявлены как private.
  3. Если класс имеет закрытый конструктор, вы не можете создать объект этого класса извне класса.

Пример использования private

В этом примере выдается ошибка компиляции, поскольку мы пытаемся получить доступ к частному члену данных и методу класса ABC в классе Example. Элемент данных и метод private доступны только внутри класса.

class ABC{  
   private double num = 100;
   private int square(int a){
	return a*a;
   }
}  
public class Example{
   public static void main(String args[]){  
	ABC obj = new ABC();  
	System.out.println(obj.num); 
	System.out.println(obj.square(10));
   }  
}

Output:
Compile - time error

Protected — защищенный доступ

Элемент данных и метод protected доступны только классам одного и того же пакета и подклассам, присутствующим в любом пакете. Также можно сказать, что модификатор защищенного доступа похож на модификатор доступа по умолчанию, за одним исключением, что он имеет видимость в подклассах.

Классы не могут быть объявлены protected. Этот модификатор обычно используется в родительских дочерних отношениях.

Пример protected

В этом примере класс Test, присутствующий в другом пакете, может вызвать метод addTwoNumbers(), который объявлен как protected. Это связано с тем, что класс Test расширяет класс Addition, а protected разрешает доступ защищенным членам в подклассах (в любых пакетах).

Addition.java

package abcpackage;
public class Addition {

   protected int addTwoNumbers(int a, int b){
	return a+b;
   }
}

Test.java

package xyzpackage;
import abcpackage.*;
class Test extends Addition{
   public static void main(String args[]){
	Test obj = new Test();
	System.out.println(obj.addTwoNumbers(11, 22));
   }
}

Вывод:
33

Public — публичный доступ

Члены, методы и классы, которые объявлены как public, могут быть доступны из любого места. Этот модификатор не накладывает никаких ограничений на доступ.

Пример применения public

Давайте возьмем тот же пример, который мы видели выше, но на этот раз метод addTwoNumbers() имеет public модификатор, и класс Test может получить доступ к этому методу, даже не расширяя класс Addition.

Это потому, что публичный модификатор виден везде.
Addition.java

package abcpackage;

public class Addition {

   public int addTwoNumbers(int a, int b){
	return a+b;
   }
}

Test.java

package xyzpackage;
import abcpackage.*;
class Test{
   public static void main(String args[]){
      Addition obj = new Addition();
      System.out.println(obj.addTwoNumbers(100, 1));
   }
}

Output:
101

Оцени статью

Средняя оценка / 5. Количество голосов:

Спасибо, помогите другим - напишите комментарий, добавьте информации к статье.

Или поделись статьей

Видим, что вы не нашли ответ на свой вопрос.

Помогите улучшить статью.

 

Пока нет комментариев.

Добавить комментарий

Ваш e-mail не будет опубликован.

СайдбарКомментарии (0)