Преглед на защитената ключова дума в Java
Защитените ключови думи са ключови думи, които се използват за ограничаване на обхвата, в който променливата, метода и конструкторите могат да бъдат достъпни. Той е един от видовете модификатори на достъп в Java. Те се използват за разграничаване на обхвата от методи, променливи, конструктори и класове. В Java има 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);
)
)
Тук класът „Подклас“ разширява „MyClass“ и по този начин защитената ключова дума може да се използва тук, като създава обект на SubClass и извиква променливите.
изход:
Защитените ключови думи могат да се използват само на ниво член, т.е. вътрешни класове, които са декларирани извън функция и които са нестатични. Защитената ключова дума е различна от тази на частната, тъй като те могат да бъдат достъпни извън клас и в подклас на друг пакет.
Някои от ограниченията за използване на защитени ключови думи са:
- Те не могат да се използват за деклариране на класове за защитени.
- Интерфейсите не могат да бъдат декларирани като защитени.
- Достъпността извън пакета е само чрез наследяване.
- Конструктор, който е защитен, не може да бъде достъпен извън пакета, като създаде своя екземпляр.
Примери
Нека да разгледаме някои примери, в които можем да разберем по-добре концепцията на защитените ключови думи.
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“ и създаваме нов клас с името „Example“. Тук заявяваме, че нашата ключова дума „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”. Защитената ключова дума може да бъде достъпна само чрез наследяване от пакет1, следователно „ProtectedExample2“ е разширено от „Пример“. По подобен начин като първия пример, ние трябва да създадем обект от клас „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“. Също така, защитен клас, наречен „Example“, е деклариран извън функцията, но в същия пакет. Когато се създаде обект от "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();
)
)
изход:
Значение на защитената ключова дума
- Тези ключови думи позволяват класовете или техните променливи да бъдат наследени от неговия родителски клас, което не е възможно с която и да е друга ключова дума с ограничение, като частна.
- Защитената ключова дума е комбинацията от предимството на частната ключова дума и тази на публичната ключова дума. Той елиминира недостатъка на публичната ключова дума, че променливата или класът са достъпни от всяка точка на програмата чрез ограничаване на обхвата.
Заключение - Защитена ключова дума в Java
Както е показано в горните примери, ние избираме защитени ключови думи в зависимост от нивото на достъп, което ни е необходимо на ниво код. Те помагат значително в случаите, когато е необходимо да се получи същата променлива или клас от други наследени методи в програмата. Връзката родител-дете винаги присъства между родителския клас и неговите подкласове, които използват защитената ключова дума.
Препоръчителни статии
Това е ръководство за защитените ключови думи в Java. Тук обсъждаме преглед, синтаксис и различни примери на защитени ключови думи в Java. Можете също да разгледате следните статии, за да научите повече -
- Капсулиране в Java
- Конструктор в Java
- Въпроси за интервю на Java
- Повишаване в OOPs
- Java Ключови думи
- Инструменти за разполагане на Java
- Достъп Модификатори в PHP
- По-важно в Java
- Капсулиране в JavaScript