gpt4 book ai didi

Java - 帮助我理解从子类访问 protected 成员(再次)

转载 作者:行者123 更新时间:2023-11-30 07:35:38 24 4
gpt4 key购买 nike

好吧,我必须承认我是 Java 编程的新手,并且非常犹豫是否要在这里发布问题,因为有很多问题与我的问题类似。我已经查看了这些问题,但我仍然无法理解“ protected ”修饰符背后的逻辑是什么。所以我认为最好在这里发布我自己的问题。

这是 PackOne 包中的 A

package PackOne;

public class A {

protected void protectedMethod() {
System.out.println("A's protectedMethod");
}

}

这是 PackTwo 包中的类 B。但是,它是 A 类的子类。

package PackTwo;

import PackOne.A;

public class B extends A {

public static void main(String[] args) {

//Test 1
protectedMethod(); //error: non-static method protectedMethod()
// cannot be referenced from a static context.

//Test 2
A instanceofA = new A();
instanceofA.protectedMethod();//error: protectedMethod()
//has protected access in PackOne.A
}

public void anotherMethodOfB() {

//Test 3
protectedMethod();//Pass
}

//Test 4
A instanceofA = new A();
instanceofA.protectedMethod();//error: package instanceofA does not existed.
}

请解释为什么只有测试 3 对 A 类中 protected 方法的调用通过,而其他 3 个测试(1,2,4)却产生错误?

最佳答案

这与子类无关。

您不能从静态函数中调用非静态方法。现在

public static void main

是静态的,而

protectedMethod()

不是。

其次,您不能从类的“外部”调用 protected 方法。如果您在 B 类中,则不能调用不是 B 的另一个类的 protected 方法。

最后,关于第 4 点,这段代码不是方法的一部分,所以它根本没有任何意义。

关于Java - 帮助我理解从子类访问 protected 成员(再次),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4252973/

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