Обзор защищенного ключевого слова в Java

Защищенные ключевые слова - это ключевые слова, которые используются для ограничения области, в которой можно получить доступ к переменной, методу и конструкторам. Это один из типов модификаторов доступа в Java. Они используются для разграничения области действия методов, переменных, конструкторов и классов. В Java есть 4 типа модификаторов доступа:

  1. Ключевое слово по умолчанию: к ним можно получить доступ только внутри пакета и нельзя вызвать вне его. Как следует из названия, когда не указан спецификатор доступа, он автоматически назначается по умолчанию.
  2. Ключевое слово Public: к ним можно получить доступ из любой точки программы. Это означает, что он может быть использован из того же или другого класса и того же или другого пакета.
  3. Приватное ключевое слово: они ограничивают ключевые слова более высоким уровнем, не позволяя получить к ним доступ из любого места за пределами самого класса.
  4. Защищенное ключевое слово. В этой статье мы узнаем больше о защищенных ключевых словах.

Как только переменная или метод помечены как защищенные, доступ к ним можно получить только с помощью следующих методов:

  • Внутри тот же класс, в котором он объявлен.
  • Из других классов, которые также находятся в том же пакете, что и объявленный класс.
  • Классы наследуются от заявленного независимо от их комплектации.

Защищенные ключевые слова похожи на сочетание как открытых, так и частных ключевых слов, поскольку они были введены для того, чтобы иметь возможность доступа к переменным вне класса (что невозможно в случае частных ключевых слов), но также поддерживают то, что только определенные методы могут наследовать одно и то же.

Синтаксис

Защищенные ключевые слова объявляются с префиксом ключевого слова как «защищенный». Сначала мы объявляем защищенное ключевое слово в одном из классов с именем «MyClass», как показано ниже:

class MyClass (
protected String name = "Katy";
protected int token= 55;
)
public class SubClass extends MyClass (
public static void main(String() args) (
SubClass obj = new SubClass();
System.out.println(obj.name + "'s token number is: " + obj.token);
)
)

Здесь класс «SubClass» расширяет «MyClass», и, следовательно, защищенное ключевое слово может использоваться здесь путем создания объекта SubClass и вызова переменных.

Выход:

Защищенные ключевые слова могут использоваться только на уровне члена, то есть внутренних классов, которые объявлены вне функции и являются нестатическими. Защищенное ключевое слово отличается от ключевого слова private, поскольку к ним можно получить доступ вне класса и в подклассе другого пакета.

Некоторые ограничения на использование защищенных ключевых слов:

  • Они не могут использоваться для объявления классов как защищенных.
  • Интерфейсы не могут быть объявлены как защищенные.
  • Доступ вне пакета возможен только через наследование.
  • Защищенный конструктор не может быть доступен вне пакета путем создания его экземпляра.

Примеры

Давайте рассмотрим несколько примеров, где мы можем лучше понять концепцию защищенных ключевых слов.

1. Вызов защищенного ключевого слова без расширения родительского класса.

Здесь мы пытаемся вызвать ключевое слово из родительского класса «package1». «ProtectedExample2» создается в «package2», и здесь вызывается ключевое слово «disp». Но код не сможет получить доступ к ключевому слову, поскольку дочерний класс не унаследовал его значение от основного класса и выдаст исключение, как показано.

Код:

package com.package1;
public class Example (
protected String disp="Printing message from protected variable from package1";
)
//Create new package as com.package2
//Create new class as ProtectedExample2
package com.package2;
import com.package1.Example;
public class ProtectedExample2 (
public static void main(String() args) (
ProtectedExample2 a=new ProtectedExample2();
System.out.println(a.disp);
)
)

Выход:

2. Доступ к защищенному классу

В этом примере мы пытаемся получить доступ к классу «ProtectedExample5», который защищен. Это вызывает ошибку компиляции.

Код:

protected class ProtectedExample5 (
void display()
(
System.out.println("Try to access outer protected class");
)
public static void main(String() args) (
ProtectedExample5 p=new ProtectedExample5();
p.display();
)
)

Выход:

3. Отображение защищенного ключевого слова из того же пакета, но другого класса

В приведенном ниже примере мы сначала создаем пакет с именем «com.package1» и создаем новый класс с именем «Пример». Здесь мы заявляем, что наше ключевое слово «disp» защищено. Мы попытаемся отобразить это защищенное ключевое слово, используя класс «Example1». Для этого сначала необходимо создать объект родительского класса «Example1», а затем вывести значение, присвоенное ключевому слову «disp».

Код:

package com.package1;
public class Example (
protected String disp="Printing message from protected variable from package1";
)
class Example1 (
public static void main(String() args) (
Example obj=new Example();
System.out.println(obj.disp);
)
)

Выход:

4. Отображение защищенного ключевого слова из другого пакета

Используя тот же код, что и выше, мы увидим, как вызвать защищенное ключевое слово, создав другой пакет «package2». К защищенному ключевому слову можно получить доступ только через наследование от package1, поэтому «ProtectedExample2» расширен от «Example». Аналогично первому примеру, мы должны создать объект класса «ProtectedExample2», чтобы получить доступ к защищенному ключевому слову из пакета «com.package1».

Код:

package com.package2;
import com.package1.Example;
public class ProtectedExample2 extends Example(
public static void main(String() args) (
ProtectedExample2 a=new ProtectedExample2();
System.out.println(a.disp);
)
)

Выход:

5. Доступ к защищенному классу путем переопределения подкласса

Здесь класс объявлен защищенным внутри унаследованного класса «Example5». Кроме того, защищенный класс с именем «Пример» объявляется вне функции, но в том же пакете. Когда создается объект «Example5» и вызывается защищенный класс «disp ()», мы можем наблюдать, что переопределенный метод вызывается вместо внешнего класса. Это потому, что мы не сможем импортировать «com.package1» и его класс «Пример», так как он не виден и вызывает ошибку компиляции.

Код:

//Create a file by Example.java
package com.package1;
class Example
(
protected void disp()
(
System.out.println("Printing from protected class in the outside function");
)
)
//Create a class by the name Example5.java
public class Example5 extends Example (
protected void disp()
(
System.out.println("Accessing the overriden function");
)
public static void main(String() args) (
Example5 exp=new Example5();
exp.disp();
)
)

Выход:

Важность защищенного ключевого слова

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

Заключение - Защищенное ключевое слово в Java

Как показано в приведенных выше примерах, мы выбираем защищенные ключевые слова в зависимости от уровня доступа, который нам требуется на уровне кода. Они очень помогают в тех случаях, когда к той же переменной или классу нужно обращаться из других унаследованных методов в программе. Родительско-дочерние отношения всегда присутствуют между родительским классом и его подклассами, которые используют ключевое слово protected.

Рекомендуемые статьи

Это руководство по защищенным ключевым словам в Java. Здесь мы обсуждаем обзор, синтаксис и различные примеры защищенных ключевых слов в Java. Вы также можете посмотреть следующие статьи, чтобы узнать больше -

  1. Инкапсуляция в Java
  2. Конструктор в Java
  3. Java интервью вопросы
  4. Переопределение в ООП
  5. Ключевые слова Java
  6. Инструменты развертывания Java
  7. Модификаторы доступа в PHP
  8. Переопределение в Java
  9. Инкапсуляция в JavaScript