当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。