Java 中的 protected 和 package 访问修饰符


protected 和 package 访问修饰符决定了如何访问类或方法的成员。这些修饰符在声明成员时附加到成员上。我们知道,这些访问修饰符在 Java 面向对象的概念(如封装、多态和继承)中起着重要作用。它有助于防止滥用成员提供的功能。我们将尝试通过示例程序来理解 Java 中的 protected 和 package 访问修饰符。

Java 中的访问修饰符

Protected 访问修饰符

它主要用于继承的情况下,以控制对父类成员和相应子类成员的访问。它允许访问包外的元素,但仅限于类的直接子类。这里,包是容纳一组类的容器。

一些 protected 访问修饰符的示例:

protected int i1 = 108;
protected double d2 = 6.55;

这里,变量被声明为 protected。

示例

以下示例说明了在 Java 中使用 protected 方法。

class Pack {  
   protected void prnt() {
      String msg = "I am accessing a protected method";
      System.out.print(msg);
   }  
}  
public class ClassShow extends Pack {  
   public static void main(String args[]) { 
      // creating object of child class
      ClassShow obj = new ClassShow();  
      // method calling through object of child class
      obj.prnt();  
   }  
} 

输出

I am accessing a protected method

在上面的代码中,类 'Pack' 是 'ClassShow' 的父类。在父类中,我们声明了一个名为 'prnt()' 的 protected 方法来打印一条简单的消息。在子类 'ClassShow' 的 main() 方法中,我们定义了一个子类 'ClassShow' 的对象来调用 protected 方法 'prnt()'。

Package 访问修饰符

它也称为默认访问修饰符。当我们没有显式地为类和方法指定任何访问说明符时,Java 编译器会自动将其视为默认的或包成员。我们可以在子类以及同一包内的其他类中访问这些成员。

一些 package 访问修饰符的示例:

int i1 = 108;
double d2 = 6.55;

这里,变量被声明为默认的或包成员。

示例

以下示例说明了包成员在 Java 中的工作方式。

public class Overflw {
   static void methodA(int data1) {
      // default method 1
      data1++;
      methodB(data1); 
      // calling methodB
   }
   static void methodB(int data1) {
      // default method 2
      data1++;
      int data2 = 5; 
      // default member variable
      int mult = data1 * data2;
      System.out.println("Value of data1 and data2 multiplication is: " + mult);
   }
   public static void main(String []args) {
      int data1 = 0;  
      // variable with default modifier
      methodA(data1); 
      // calling methodA
   }
}

输出

Value of data1 and data2 multiplication is: 10

我们创建了两个名为 'methodA' 和 'methodB' 的带参数的用户定义方法。在 main 方法中,我们声明并初始化一个整数变量 'data1' 为 0,然后将其作为参数传递给 'methodA'。现在,'methodA' 调用 'methodB',并使用 'data1' 的增量值。在 'methodB' 内部,我们计算乘法并打印结果。

Protected 与 Package 访问修饰符的比较

从上面的讨论中,我们可以得出 Protected 和 Package 访问修饰符之间以下区别:

Protected

Package

我们使用 protected 关键字来指定成员被设置为 protected。

它不需要任何特定的关键字。

protected 成员在包内以及其他包中都是可访问的。但在其他包的情况下,它只能被继承类访问。

package 访问修饰符比 protected 更受限制,因为包成员只能被同一包访问。

我们不能将类定义为 protected。

我们可以定义一个默认类。

它仅适用于成员级别。

它适用于顶级和成员级别。

结论

我们首先定义了 protected 和 package 访问修饰符,并在后面的部分中通过相应的示例详细解释了它们。最后,我们讨论了它们彼此的不同之处。

更新于:2023年5月16日

534 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告