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