Java 中的受保护访问修饰符和最终访问修饰符


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

Java 中的访问修饰符

受保护访问修饰符

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

受保护访问修饰符的一些示例 -

protected int data1 = 5;
protected double data2 = 5.55;

这里,变量被声明为受保护的。

示例

以下示例说明了在 Java 中使用受保护方法。

class Pack {  
   protected void prnt() {
     String msg = "Tutorials Point!!";
     System.out.print("Welcome to " + 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();  
   }  
}  

输出

Welcome to Tutorials Point!!

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

最终访问修饰符

当类的任何成员或方法使用关键字“final”声明为最终时,我们基本上通过阻止修改它们来使它们成为常量。最终成员必须在声明时初始化,或者也可以在构造函数中初始化。大多数情况下,我们更倾向于在声明期间进行初始化。

最终访问修饰符的一些示例 -

final int pinCode = 500081;
protected double pi = 3.14;

这里,变量被声明为最终的。

Java 中的 final 关键字以三种不同的方式使用 -

  • 最终变量 - 我们不能修改最终变量的值,它更像是一个常量。

  • 最终方法 - 为了防止覆盖,我们使方法成为最终的。我们在子类中覆盖一个方法,以根据需要修改指定方法的功能。

  • 最终类 - 我们不能继承最终类的属性。

示例

以下示例说明了在 Java 中使用 final 关键字与方法。

Code:
class Pack {  
   public final void prnt() {
      String msg = "Tutorials Point!!";
      System.out.print("Welcome to " + msg);
   }
}  
public class ClassShow extends Pack {
   public final void prnt() {
      // overriding prnt method
      String msg = "Tutorix!!";
      System.out.print("Welcome to " + msg);
   }
   public static void main(String args[]) { 
      // creating object of child class
      ClassShow obj = new ClassShow();  
      // method calling through object of child class
      obj.prnt();  
   }  
}  

输出

ClassShow.java:1: error: class, interface, enum, or record expected
Code:
^
1 error

在上面的代码中,类“Pack”是“ClassShow”的父类。在父类中,我们声明了一个名为“prnt()”的最终方法来打印一条简单消息。在子类中,我们尝试覆盖“prnt()”方法以修改“msg”的值,并在其 main() 方法内部,我们定义了一个子类“ClassShow”的对象来调用最终方法“prnt()”。但是我们得到一个错误,指出我们不能覆盖最终方法。

受保护与最终访问修饰符

从上面的讨论中,我们可以得出受保护和最终访问修饰符之间以下差异的结论 -

受保护

最终

它是一个访问修饰符,这意味着它可以控制变量和方法的访问。

它实际上是一个非访问修饰符,这意味着它可以控制类及其成员的行为。

我们不能将类定义为受保护的。

我们可以将类定义为最终的。

它适用于成员级别。

它适用于顶级。

我们使用 protected 关键字。

它需要 final 关键字。

受保护成员在包内以及其他包中都是可访问的。但在其他包的情况下,它仅对继承的类可访问。

最终成员不能在当前包之外访问。

结论

我们从定义受保护和最终访问修饰符开始本文,并在后面的部分中,我们分别用示例详细解释了它们。最后,我们讨论了它们之间的一些区别。

更新于: 2023年5月16日

867 次查看

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告