java protected方法可访问性
在下面的代码中,Consumer类可以访问Parent类的受保护方法。如何实现,因为Parent和Consumer类之间没有关系。请解释
class Parent { public void method1(){ System.out.println("PUBLIC METHOD"); } private void method2(){ System.out.println("PRIVATE METHOD"); } protected void method3(){ System.out.println("PROTECTED METHOD"); } } public class Consumer { public static void main(String[] args){ Parent parentObj = new Parent(); parentObj.method1(); //parentObj.method2(); parentObj.method3(); } }
谢谢
protected
意思是:相同的包或通过inheritance。 由于您的类都在default package
(在现实生活中不推荐),因此protected
启用访问。 顺便说一句:如果你试图测试java访问控制,你就忘记了default access
( default access
=没有修饰符= package private
)。
另一方面, private
访问意味着:除了这个特定的类(以及仍然是宿主类成员的非静态内部类)之外,从无处访问。
以下是Java语言规范的相关摘录:
JLS 6.6访问控制
Java编程语言提供访问控制机制,以防止
package
或class
的用户依赖于该package
或class
的实现的不必要细节。 如果允许访问,则称所访问的实体是可访问的 。JLS 6.6.1确定可访问性
- […]
- 只有在类型可访问且声明成员/构造函数允许访问时,才能访问引用类型的成员/构造函数:
public
:允许访问。protected
: 仅当满足以下条件之一时才允许访问 :
- 从 包含 声明
protected
成员或构造函数 的类 的package
中 发生对成员或构造函数的访问 。- 访问是正确的,如JLS 6.6.2中有关
protected
访问的详细信息中所述。
- 可以从
package
外部访问对象的protected
成员/构造函数,只能通过负责实现该对象的代码来声明它。private
:当且仅当它发生在包含成员或构造函数声明的顶级类的主体内时才允许访问。- 否则,我们说存在默认访问权限 ,只有在声明类型的
package
中发生访问时才允许访问。
粗体部分是本场景中问题的答案: Parent
和Consumer
属于同一个package
,因此,至少可以从Consumer
访问Parent
protected
成员。
也可以看看
- Java教程/控制对类成员的访问
首先,它们属于同一个包装。 其次,消费者是父母的内在阶级。
亚当你是对的! 它们位于同一个包中,这就是为什么消费者类能够访问父类的受保护方法。 消费者不是父母的内在阶级。