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 访问修饰符,并在后面的部分中通过相应的示例详细解释了它们。最后,我们讨论了它们彼此的不同之处。