Java 中的訪問修飾符幫助限製類、構造函數、變量、方法或數據成員的範圍。有四種類型訪問修飾符在java中可用。各種修飾符的訪問可以見下表如下:
受保護的關鍵字在Java中指的是它的訪問修飾符之一。聲明為受保護的方法或數據成員可以從
- 同一個類內。
- 相同包的子類。
- 相同包的不同類。
- 不同包的子類。
有一些重要的要點需要記住,如下:
- 如果希望訪問包外部的受保護修飾符,那麽遺產 是需要應用的。
- 保護一個構造函數防止用戶在包外部創建類的實例。
- 期間壓倒性的, 當一個變量或方法受保護,則可以僅使用 public 或 protected 修飾符將其覆蓋到其他子類。
- 外部類和接口不能被保護。
執行:這裏我們將創建兩個包 p1 和 p2。 p1 中的 A 類被公開,以便在 p2 中訪問它。 A類中顯示的方法是受保護的,B類是從A類繼承的,然後通過創建B類的對象來訪問該受保護的方法。
示例 1:套餐p1
Java
// Java program to illustrate
// protected modifier
package p1;
// Class A
public class A {
protected void display()
{
System.out.println("GeeksforGeeks");
}
}
套餐p2
Java
// Java program to illustrate
// protected modifier
package p2;
// import all classes in package p1
import p1.*;
// Class B is a subclass of A
class B extends A {
public static void main(String args[])
{
B obj = new B();
obj.display();
}
}
輸出:
GeeksforGeeks
Now let us try to analyze different conditions of access:
- Calling protected function without extending the parent class
- Accessing a protected class
- Accessing display function from the same package but different
- Accessing display function from a different package
- Accessing a protected class by overriding to sub-class within the same package
A. 調用受保護的函數而不擴展父類
這裏我們將創建兩個包 p1 和 p2。 p1 中的 A 類被公開,以便在 p2 中訪問它。 A類中顯示的方法是受保護的。但代碼將無法訪問函數 “display”,因為子類尚未從主類繼承其值,並且會拋出異常,如圖所示。
實施例1-A:套餐p1
Java
// Java program to illustrate Protected Modifier
package p1;
// Class A
public class A {
// Method
protected void display()
{
// Print statement
System.out.println("GeeksforGeeks");
}
}
實施例1-B:套餐p2
Java
// Java program to illustrate
// protected modifier
package p2;
// import all classes in package p1
import p1.*;
class B {
public static void main(String args[])
{
B obj = new B();
obj.display();
}
}
輸出:
Exception in thread "main"
java.lang.RuntimeException:
Uncompilable source code -
Erroneous sym type: p2.B.display
at p2.B.main(B.java:16)
B:訪問受保護的類
在這裏,我們嘗試訪問受保護的類 A,結果出現錯誤。
示例A:
Java
// Java program to illustrate
// protected modifier
package p1;
// Class A
protected class A {
void display()
{
System.out.println("GeeksforGeeks");
}
}
示例B:套餐p2
Java
// Java program to illustrate
// protected modifier
package p2;
// import all classes in package p1
import p1.*;
// Class B is a subclass of A
class B extends A {
public static void main(String args[])
{
B obj = new B();
obj.display();
}
}
輸出:這會拋出一個錯誤
Exception in thread "main"
java.lang.RuntimeException:
Uncompilable source code -
Erroneous sym type: p2.B.display
at p2.B.main(B.java:16)
C:從同一包但不同的類訪問顯示函數
執行:在此示例中,我們可以訪問同一包但不同類中的受保護函數 “display”
示例A:套餐p1
Java
// Java program to illustrate
// protected modifier
package p1;
// Class A
public class A {
protected void display()
{
System.out.println("GeeksforGeeks");
}
}
示例B:C級
Java
// Java program to illustrate
// protected modifier
// Class C is a subclass of A
public class C {
public static void main(String args[])
{
A obj = new A();
obj.display();
}
}
輸出:
GeeksforGeeks
D:從不同的包訪問顯示函數
在這裏,我們嘗試通過繼承和擴展類來從不同的包訪問受保護的函數顯示。
示例A:套餐p1
Java
// Java program to illustrate
// protected modifier
package p1;
// Class A
public class A {
protected void display()
{
System.out.println("GeeksforGeeks");
}
}
示例B:套餐p2
Java
// Java program to illustrate
// protected modifier
package p2;
// import all classes in package p1
import p1.*;
// Class B is a subclass of A
class B extends A {
public static void main(String args[])
{
B obj = new B();
obj.display();
}
}
輸出:
GeeksforGeeks
E:通過覆蓋同一包內的Sub-Class來訪問受保護的類
這裏我們設計了兩個類A和C,其中C類是被重寫的類。
示例A:A級
Java
// Java program to illustrate
// protected modifier
package p1;
// Class A
public class A {
protected void display()
{
System.out.println("Class A");
}
}
示例B:C級
Java
// Java program to illustrate
// protected modifier
public class C extends A {
// overridden function
protected void display()
{
System.out.println("Class C");
}
public static void main(String args[])
{
C obj1 = new C();
obj1.display();
}
}
輸出:
Class C
相關用法
- Java Process Destroy()用法及代碼示例
- Java Process exitValue()用法及代碼示例
- Java Process isAlive()用法及代碼示例
- Java Process waitFor()用法及代碼示例
- Java Process destroy()用法及代碼示例
- Java Process getErrorStream()用法及代碼示例
- Java Process getInputStream()用法及代碼示例
- Java Process getOutputStream()用法及代碼示例
- Java ProcessBuilder directory()用法及代碼示例
- Java ProcessBuilder environment()用法及代碼示例
- Java ProcessBuilder redirectErrorStream()用法及代碼示例
- Java ProcessBuilder start()用法及代碼示例
- Java Properties loadFromXML()用法及代碼示例
- Java Properties propertyNames()用法及代碼示例
- Java Properties setProperty()用法及代碼示例
- Java Properties stringPropertyNames()用法及代碼示例
- Java PropertyPermission equals()用法及代碼示例
- Java PropertyPermission getActions()用法及代碼示例
- Java PropertyPermission hashCode()用法及代碼示例
- Java PropertyPermission implies()用法及代碼示例
- Java PropertyPermission newPermissionCollection()用法及代碼示例
- Java PropertyResourceBundle getKeys()用法及代碼示例
- Java PropertyResourceBundle handleGetObject()用法及代碼示例
- Java Provider elements()用法及代碼示例
- Java Properties list(PrintStream)用法及代碼示例
注:本文由純淨天空篩選整理自Chinmoy Lenka大神的英文原創作品 Protected Keyword in Java with Examples。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。