Какие переменные без публичного частного или защищенного объявлены как?

Если вместо:

private JButton theButton;

Я делаю:

JButton theButton;

В чем разница?

Спасибо

4 ответа

Решение

Пакет. Они видны другим классам в том же пакете.

FWIW, я обычно использую свою собственную аннотацию @Package без опций на них, просто чтобы прояснить, что я знаю, что делаю - что я не просто что-то забыл. Несмотря на то, что это значение по умолчанию, доступ к пакетам, вероятно, используется в высококачественном коде меньше, чем любая из трех других возможностей - с одним большим исключением:

В некоторых стилях модульного тестирования желательно иметь возможность получать доступ к методам или полям, которые обычно являются закрытыми. Один из способов предоставления доступа - установить для них доступ к пакету и поместить класс модульного тестирования в один и тот же пакет (но обычно в другое дерево каталогов "test"). Некоторые разработчики считают, что это плохая практика - в общем, плохо использовать частные (или пакетные для тестирования) методы в тестах.

В 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.
}

Вот полезный обзор, показывающий доступ, разрешенный каждым модификатором:

Первый столбец данных указывает, имеет ли сам класс доступ к члену, определенному уровнем доступа. Как видите, класс всегда имеет доступ к своим членам. Второй столбец указывает, имеют ли классы в том же пакете, что и класс (независимо от их происхождения), доступ к элементу. В третьем столбце указано, имеют ли подклассы класса, объявленного вне этого пакета, доступ к члену (т. е. классы, которые расширяют этот класс). Четвертый столбец указывает, все ли классы имеют доступ к элементу.

Источник (Оракул)

Так же, как статическая функция на c. виден только в том же файле.

Другие вопросы по тегам