You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java跨包静态导入protected静态成员的可见性问题

跨包访问protected静态成员的问题解答

先直接给结论:未继承B的类C完全不能访问B.VALUE,原因得从Java的protected访问规则说起。

你给出的B类里,VALUE是protected static final修饰的——别被static迷惑了,protected的访问权限规则对静态成员和实例成员是一致的:

  • 同一个包内的类可以访问;
  • 不同包的子类可以访问;
  • 其他情况(不同包且非子类)一律无权访问。

类C在包a,既不在B所在的包b,也没有继承B,完全不符合上面两个允许访问的条件,所以不管你是直接通过B.VALUE调用,还是尝试静态导入,都会触发编译错误。比如你写这样的代码:

package a;
import b.B;
import static b.B.VALUE;
class C {
    void test() {
        // 编译报错:B.VALUE has protected access in b.B
        System.out.println(B.VALUE);
        // 同样报错,静态导入也无法绕过权限检查
        System.out.println(VALUE);
    }
}

而类A能正常访问,正是因为它是B的子类,满足了“不同包子类”的访问条件,所以才能合法使用这个protected静态成员。

内容的提问来源于stack exchange,提问作者marsouf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:32:52