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

Lee*_*fin 27 java protected access-modifiers

我正在阅读"Java编程语言"第3版.

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

更确切地说,除了可以在类本身内访问以及在同一个包中编码之外,还可以通过对象引用从类访问受保护的成员,这些引用至少与类的类型相同,类的类型的引用或其中一个亚型.

两个方面让我感到困惑:

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

2.我不明白这是什么a protected member can also be accessed from ...意思,任何人都可以向我解释好吗?

Jes*_*per 18

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

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


Hus*_*awi 11

在Java中,protected意味着成员可以被同一个包中的任何类和子类访问,即使它们位于另一个包中.

注意

A protected variable is not visible outside the package
Run Code Online (Sandbox Code Playgroud)

例如B扩展A和A有一个受保护的int x; 它可以在类B中使用.但不能使用其实例变量进行访问


Chr*_*erS 0

我不明白受保护的成员也可以从...访问是什么意思,任何人都可以向我解释一下吗?

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