我正在阅读书籍Java编程语言(第三版)。
在第3.5章中,它用以下话语说明了protected
修饰符:
更准确地说,除了在类本身内部和在相同包中的代码中可访问外,受保护的成员还可以通过与至少与该类相同类型的对象引用(即类的类型或其子类型的引用)从类中访问。
这些话让我困惑,在两个方面:
1. 受保护的成员可以被同一包中的代码访问吗? 我之前所知道的是受保护的成员只能被子类访问...
2. 我不明白受保护的成员还可以通过 ...
是什么意思,谁能解释一下?
我正在阅读书籍Java编程语言(第三版)。
在第3.5章中,它用以下话语说明了protected
修饰符:
更准确地说,除了在类本身内部和在相同包中的代码中可访问外,受保护的成员还可以通过与至少与该类相同类型的对象引用(即类的类型或其子类型的引用)从类中访问。
这些话让我困惑,在两个方面:
1. 受保护的成员可以被同一包中的代码访问吗? 我之前所知道的是受保护的成员只能被子类访问...
2. 我不明白受保护的成员还可以通过 ...
是什么意思,谁能解释一下?
是的,protected
成员可以从类本身、类的子类和同一包中的所有类中访问(无论这些类是否为子类)。如果你之前不知道最后一部分,那么你刚刚学到了新东西。
这意味着你可以使用这些成员;如果一个成员不可访问,这意味着当你尝试使用它时会得到编译器错误。
protected int status;
并在以后访问它时,它不会抛出错误。因为它的默认值会自动设置为0。所以当它不可访问时,status
将始终为0
。 - Janaka R Rajapaksha在Java中,protected
表示该成员可以被同一包中的任何类以及子类访问,即使它们在其他包中。
注意:
protected
访问修饰符可在包内和包外通过继承来访问
例如,B (在另一个包中)扩展了A,并且A有一个受保护的整数x; 它可以在B类中使用。
1) 是的,受保护的成员可以被同一包中的类访问。这是Java的工作方式。
2) 这意味着子类可以访问它们。
以下是答案
是的。类的受保护成员(实例变量和方法)可以被同一包中的其他类访问,也可以被扩展包含要访问的成员的此类的任何其他类访问。在同一规范中,他们还提供了表格,其中访问级别严格增加,提供了前一级别中允许的所有访问:private -> package -> protected -> public
由于类X的受保护成员(实例变量/状态和方法/行为)是作为X的子类Y1、Y2、Y3的一部分继承和可见的,并且可能进一步下降到下一个级别,因此类型为X或Y1、Y2、y3的任何对象引用都可以用于访问该受保护成员。
就像公共和私有之间的区别一样。你可以从公共类中访问所有内容,而从私有类中访问的内容较少。
protected
和其他访问修饰符。链接 - aioobe