受保护的修饰符是什么意思?

时间:2011-12-26 17:21:13

标签: java protected access-modifiers

我正在阅读这本书The Java Programming Language, 3rd edition

在第3.5章中,它使用以下单词说明protected修饰符:

  

更确切地说,除了可以在类本身内访问以及在类中进行编码之外       同一个包,也可以通过对象引用从类访问受保护的成员       至少与类相同的类型,类的类型或引用       一个是它的子类型。

这些话使我感到困惑,在两个方面:

1。受保护的成员可以通过同一个包中的代码访问吗?之前我所知道的是受保护的成员只能由子类访问...

2。我不明白a protected member can also be accessed from ...的意思,任何人都可以向我解释一下吗?

6 个答案:

答案 0 :(得分:17)

  1. 是的,可以从类本身,类的子类以及类的同一个包中的所有类访问protected个成员(如果这些是子类,则无关紧要)。如果你之前不知道最后一部分,那么你刚学到了新的东西。

  2. 这只是意味着您可以使用这些成员;如果某个成员不可访问,则意味着当您尝试使用它时会遇到编译器错误。

答案 1 :(得分:11)

在Java中,protected表示该成员可以被同一个包中的任何类和子类访问,即使它们位于另一个包中。

注意

A protected variable is not visible outside the package
  

例如B扩展A而A具有受保护的int x;它可以在B类中使用。但不能使用其实例变量

进行访问

答案 2 :(得分:2)

1)是的,可以通过同一个包中的类访问受保护的成员。这就是Java的工作方式。

2)这意味着子类可以访问它们。

答案 3 :(得分:0)

  

我不明白受保护的会员也可以从哪里访问...意思是,有人可以向我解释一下吗?

例如,您有一个对象A和一个对象B,它们都是同一个类。如果对象A具有对它的引用,则对象A将能够查询对象B的受保护属性和方法。受保护的修饰符在类级别强制执行,而不是在对象级别强制执行。在某些情况下,这可以派上用场。

答案 4 :(得分:0)

以下是答案

  1. 是。类的受保护成员(实例变量和方法)可以由同一个包中的其他类以及扩展此类的任何其他类来访问,该类包含要访问的成员。在同一规范中,他们还给出了访问级别严格增加的表,提供了前一级别允许的所有访问:private - >包 - >受保护的 - >公共

  2. 由于类X的受保护成员(实例变量/状态和方法/行为)是继承的,并且作为X的子类的一部分可见,例如Y1,Y2,Y3,可能会进一步下降到下一个级别,任何类型为X或Y1,Y2,y3的对象引用都可用于访问该受保护的成员。

答案 5 :(得分:0)

把它想象成公共和私人之间。您可以从公共类访问所有内容,而不是从私有类访问。