我正在阅读这本书The Java Programming Language, 3rd edition。
在第3.5章中,它使用以下单词说明protected
修饰符:
更确切地说,除了可以在类本身内访问以及在类中进行编码之外 同一个包,也可以通过对象引用从类访问受保护的成员 至少与类相同的类型,类的类型或引用 一个是它的子类型。
这些话使我感到困惑,在两个方面:
1。受保护的成员可以通过同一个包中的代码访问吗?之前我所知道的是受保护的成员只能由子类访问...
2。我不明白a protected member can also be accessed from ...
的意思,任何人都可以向我解释一下吗?
答案 0 :(得分:17)
是的,可以从类本身,类的子类以及类的同一个包中的所有类访问protected
个成员(如果这些是子类,则无关紧要)。如果你之前不知道最后一部分,那么你刚学到了新的东西。
这只是意味着您可以使用这些成员;如果某个成员不可访问,则意味着当您尝试使用它时会遇到编译器错误。
答案 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)
以下是答案
是。类的受保护成员(实例变量和方法)可以由同一个包中的其他类以及扩展此类的任何其他类来访问,该类包含要访问的成员。在同一规范中,他们还给出了访问级别严格增加的表,提供了前一级别允许的所有访问:private - >包 - >受保护的 - >公共
由于类X的受保护成员(实例变量/状态和方法/行为)是继承的,并且作为X的子类的一部分可见,例如Y1,Y2,Y3,可能会进一步下降到下一个级别,任何类型为X或Y1,Y2,y3的对象引用都可用于访问该受保护的成员。
答案 5 :(得分:0)
把它想象成公共和私人之间。您可以从公共类访问所有内容,而不是从私有类访问。