gpt4 book ai didi

java - 为什么对象的实例会破坏 protected 逻辑?

转载 作者:行者123 更新时间:2023-12-02 04:32:48 25 4
gpt4 key购买 nike

我试图弄清楚 protected 访问修饰符在 Java 中的包继承之间是如何工作的。

我有 2 个示例包 p1 和 p2。在 p1 中,有一个带有名为 protectedMember 的 protected 访问实例变量的类 A1 和另一个仅扩展 A1 的类 B1。

在 p2 中,我有一个 A2 类,它也扩展了 A1。显然,在 A2 中,我将可以直接访问其父级(A1 类)的 protected 成员,这很好,而且超出了我的范围。

但是,如果我在 A2 中创建一个方法来启动 A1 或其子 B1 的实例,那么我无法访问该实例的 protected 成员。为什么 ?与默认成员不同, protected 成员可以被包和扩展该类的外部包类访问。

那么为什么在“多包”继承中我可以直接访问父级的 protected 成员,但不能通过实例访问。

请不要回复“您必须在 parent 的包裹中进行” - 我知道我必须这样做。

我想知道为什么?

package p2;

import p1.A1;
import p1.B1;

public class A2 extends A1 {
// please note - multi package inheritance
public void test (){

/*
with non of the instances below I can reach the protected member in A1
*/
A1 a1 = new A1();
B1 b1 = new B1();
}

}

最佳答案

因为这是规则。仅当对象类型为 A2(而非 A1 或 B1 实例)时,才允许从 A2 访问 A1 或 B1 中声明的 protected 成员或方法。您可以在这里找到更多信息: https://docs.oracle.com/javase/specs/jls/se8/jls8.pdf

关于java - 为什么对象的实例会破坏 protected 逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56570047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com