没有公共私有或受保护的变量是什么?

jma*_*erx 31 java

如果不是:

private JButton theButton;
Run Code Online (Sandbox Code Playgroud)

我做:

JButton theButton;
Run Code Online (Sandbox Code Playgroud)

有什么不同?

谢谢

Ed *_*aub 41

包. 它们在同一个包中的其他类中可见.

FWIW,我通常在这些上使用我自己的无操作@Package注释,只是为了清楚地表明我知道我在做什么 - 我不会忘记一些事情.尽管这是默认设置,但是高质量代码中的包访问可能比其他三种可能性中的任何一种都少 - 有一个很大的例外:

在某些样式的单元测试中,希望能够访问通常是私有的方法或字段.提供访问权限的一种方法是将它们设置为包访问,并将单元测试类放在同一个包中(但通常放在不同的"test"目录树中).一些开发人员认为这是不好的做法 - 一般来说,在测试中使用私有(或测试包)方法是不好的.


Kev*_*sco 33

在Java中有公共,受保护,包(默认)和私人可见性; 从最明显到最少排序.

如果未指定,则默认情况下可见性为.

package mytest.myvisibility;

public class MyClass
{
    public int myPublicInt; // visible to all
    protected myProtectedInt; // visible to subclasses of MyClass and to other members of the mytest.myvisibility package
    int myPackageInt; // visible only to other members of the mytest.myvisibility package
    private int myPrivateInt; // visible only to MyClass objects.
}
Run Code Online (Sandbox Code Playgroud)

  • 更新 - 详细阐述了"包"的可见性,并使可见性的顺序在描述和代码示例中保持一致. (3认同)

Joa*_*kim 6

以下是显示每个修饰符允许的访问的有用概述:

修饰符 班级 包裹 子类 世界
民众
受保护的
无修饰符
私人的

第一个数据列指示类本身是否有权访问访问级别定义的成员。正如您所看到的,类始终可以访问其自己的成员。第二列指示与该类位于同一包中的类(无论其出身如何)是否有权访问该成员。第三列指示在该包之外声明的类的子类是否有权访问该成员(即扩展该类的类)。第四列指示是否所有类都可以访问该成员。

来源(甲骨文)