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

Java类public与protected成员访问权限差异及‘world’术语咨询

嘿,咱们把这两个问题拆解开,一步步说清楚:

1. Java类中public和protected成员的访问权限及其差异?

先分别说两者的访问范围,再对比核心差异:

  • public成员:
    这是权限最高的修饰符,完全没有访问限制——不管是定义它的类本身、同一个包的类、不同包的子类,甚至是完全无关的外部类,都能自由访问它的变量或方法。
  • protected成员:
    权限相对收敛,只允许三类代码访问:
    • 定义该成员的类自己
    • 同一个包内的所有类(不管是不是子类关系)
    • 不同包下的子类(注意:只能在子类内部访问继承来的protected成员,不能直接通过父类实例在子类外部调用)

两者核心差异:public是全局无限制访问,而protected在「非子类、非同包」的外部代码中是完全不可见的。

2. 关于“world”的具体含义与访问方式?

你提到的“world”其实就是指所有不在protected允许访问范围内的代码,简单说就是「既不是当前类、也不是同包类、更不是跨包子类的外部代码」。

具体访问方式可以结合例子来看:

  • 对于public成员,这个“world”里的代码有两种访问方式:
    1. 通过类的实例访问:比如创建类的对象后,用对象名.public成员调用,不管代码在哪个包、有没有继承关系都合法。
    2. 如果是public静态成员,还能直接用类名.public静态成员访问,连实例化都不需要。
  • 而protected成员,“world”里的代码根本碰不到——比如你在一个和父类不同包、且不是父类子类的类里,创建父类实例后尝试调用它的protected成员,编译器会直接报错。

给你个代码示例更直观:

首先定义父类:

package com.example.parent;
public class ParentClass {
    public String publicVar = "Public Variable";
    protected String protectedVar = "Protected Variable";
}

同包类(可以访问两者):

package com.example.parent;
public class SamePackageClass {
    public void test() {
        ParentClass p = new ParentClass();
        System.out.println(p.publicVar); // 合法
        System.out.println(p.protectedVar); // 合法
    }
}

跨包子类(仅能在子类内部访问protected):

package com.example.child;
import com.example.parent.ParentClass;
public class ChildClass extends ParentClass {
    public void test() {
        System.out.println(protectedVar); // 合法,子类直接用继承来的成员
        ParentClass p = new ParentClass();
        // System.out.println(p.protectedVar); // 编译错误!跨包子类不能通过父类实例访问protected
    }
}

“world”类(只能访问public):

package com.example.other;
import com.example.parent.ParentClass;
public class WorldClass {
    public void test() {
        ParentClass p = new ParentClass();
        System.out.println(p.publicVar); // 合法
        // System.out.println(p.protectedVar); // 编译错误!不在访问范围内
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:10:13