當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java Protected Keyword用法及代碼示例


Java 中的訪問修飾符幫助限製類、構造函數、變量、方法或數據成員的範圍。有四種類型訪問修飾符在java中可用。各種修飾符的訪問可以見下表如下:

Difference Between Access Modifiers

受保護的關鍵字在Java中指的是它的訪問修飾符之一。聲明為受保護的方法或數據成員可以從

  • 同一個類內。
  • 相同包的子類。
  • 相同包的不同類。
  • 不同包的子類。

有一些重要的要點需要記住,如下:

  1. 如果希望訪問包外部的受保護修飾符,那麽遺產 是需要應用的。
  2. 保護一個構造函數防止用戶在包外部創建類的實例。
  3. 期間壓倒性的, 當一個變量或方法受保護,則可以僅使用 public 或 protected 修飾符將其覆蓋到其他子類。
  4. 外部類和接口不能被保護。

執行:這裏我們將創建兩個包 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:

  1. Calling protected function without extending the parent class
  2. Accessing a protected class
  3. Accessing display function from the same package but different
  4. Accessing display function from a different package
  5. 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



相關用法


注:本文由純淨天空篩選整理自Chinmoy Lenka大神的英文原創作品 Protected Keyword in Java with Examples。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。