Java protected 关键字

2025 年 4 月 21 日 | 阅读 5 分钟

protected 关键字用作访问修饰符。它可以用于变量、方法、构造函数和内部类。此修饰符提供了一个访问控制级别,允许在同一包内以及由子类访问,即使它们位于不同的包中。

protected 关键字的用法

它限制了类及其成员的可见性。如果类成员被标记为 protected,则可以被其自身类、子类以及同一包中的类访问。但是,无法被包外的任何类访问。

声明为 protected 的方法或数据成员可以从以下位置访问:

  • 同一类内部。
  • 同一包的子类。
  • 同一包的不同类。
  • 不同包的子类。

语法

protected 变量的语法

protected 方法的语法

protected 类的语法

在不同上下文中使用的 protected 关键字

protected 变量示例

示例

立即执行

输出

The score is: 200

protected 方法示例

示例

立即执行

输出

Score of TestMatch is 400.

protected 类示例

示例

立即执行

输出

Method of protected class invoked.

注意:在 Java 中,外部类不能声明为 protected。但是,内部类可以声明为 protected。

protected 构造函数示例

示例

立即执行

输出

Parent Class Protected Constructor

跨包上下文中的 protected 示例

在包的上下文中,protected 关键字允许子类访问,但限制了非子类类的访问。

示例

输出

Protected method from the Parent class

让我们来看一些使用 protected 关键字的其他场景。

在未扩展父类的情况下访问 protected 方法

在下面的程序中,我们创建了两个包:mypackage1 和 mypackage2。在类 A 中,我们声明并定义了一个 protected 方法 show()。类 A 是公共的,因为我们将在 mypackage2 中访问它。

在此,请注意,方法 show() 将无法访问,因为子类没有从主类继承其值。因此,将发生运行时异常。

运行上述代码时,我们会得到运行时异常。

访问 protected 类

在下面的程序中,我们将类 A 声明为 protected,并在 mypackage2 中扩展了该类。当我们尝试从 Main 类调用类 A 的 show() 方法时,会显示运行时异常。

运行上述代码时,我们会得到运行时异常。

从同一包的不同类访问方法

示例

输出

tpointtech

从不同包访问方法

输出

tpointtech

通过在同一包内的子类中重写来访问 protected 类

示例

输出

Child Class

要记住的重要事项

  • protected 访问修饰符在包内可访问。但是,它也可以在包外访问,但只能通过继承。
  • 我们不能将外部类和接口声明为 protected;只有内部类可以声明为 protected。
  • 如果我们使任何构造函数 protected,我们将无法从包外创建该类的实例。
  • 如果我们重写任何方法,被重写的方法(即在子类中声明的)的访问修饰符不得比父类更严格。
  • 根据上一点,如果我们声明任何方法或变量为 protected,则该方法或变量只能在子类中使用 public 或 protected 访问修饰符进行重写。

最佳实践

  • 当某个方法或变量只能被子类访问时,使用 protected 关键字是有益的。
  • 过度使用或误用 protected 关键字可能会导致意外的依赖关系。
  • 控制 protected 关键字的使用,以在封装和继承之间保持平衡。
  • 即使子类实例位于不同的包中,也可以通过这些实例访问 protected 成员。
  • protected 方法的设计应便于子类定制,而无需修改基类。