gpt4 book ai didi

java - static 修饰符是否会更改 java 中类成员的访问级别?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:16:14 27 4
gpt4 key购买 nike

我正在阅读用于 Java 7 认证的 OCA 和 OCP 这本书,我正在尝试使用 Java 8 练习这本书,我注意到一些有线的东西。

我的 Class1 类如下:

package cert;
public class Class1{
protected static void importantMethod(){
System.out.println("importantMethod() method of Class1 class TEST \n");
}

importantMethod() 方法的修饰符是protected static 包是cert 如您所见,如书中所述我希望另一个包中的另一个类,在我的例子中显示为 Class2,只能通过继承访问 importantMethod() 方法,但结果是 Class2 我也可以通过 Class1 的实例访问 importantMethod() 方法。

Class2类:

package exam;
import cert.Class1;
class Class2 extends Class1 {
public static void main(String[] args) {
Class1 c1 = new Class1();
c1.importantMethod();
}
}

如果我从 Class1 中删除 static 修饰符,它会在尝试从 访问 importantMethod() 方法时给出预期的错误>Class2:

exam\Class2.java:7: error: importantMethod() has protected access in Class1
c1.importantMethod();
^

我的问题是,非访问修饰符是否会更改类成员的访问级别?

最佳答案

一切都很好 - 这就是 protected 访问的工作方式。它在 JLS 6.6.2.1 中指定:

Let C be the class in which a protected member is declared. Access is permitted only within the body of a subclass S of C.

In addition, if Id denotes an instance field or instance method, then:

  • [Irrelevant stuff as Id does not denote an instance field or instance method]

您的代码 C 的子类S 的主体内(其中S Class2CClass1) 所以没问题。

关于java - static 修饰符是否会更改 java 中类成员的访问级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43346744/

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