Объявить атрибут класса защищенным или общедоступным? - PullRequest
2 голосов
/ 23 июля 2011

У меня есть класс скажем в пакете com.practise.mypackageone.MyClass

Класс MyClass имеет метод

 /* Modifier  */ void show()
{
 // some code here
}

Я хочу, чтобы этот метод был доступен только из другого класса пакета, скажем

com.practise.mypackagesecond.SecondClass

Теперь, если я сделаю метод общедоступным, он будет доступен везде, где я не хочу. и если я сделал его защищенным, то SecondClass должен расширить MyClass, чтобы получить к нему доступ.

Но любой другой класс пакета может также расширить мой класс для доступа к этому методу.

Как я могу предотвратить это?

Ответы [ 2 ]

4 голосов
/ 23 июля 2011

Поместите классы в один и тот же пакет и сделайте пакет методов закрытым (модификатор по умолчанию). В противном случае я думаю, что вы хотите, не достижимо.

1 голос
/ 23 июля 2011

Классы в 1-м пакете могут расширять класс из 2-го пакета, который выглядит следующим образом, и они могут реализовывать метод show () по своему усмотрению:

    public static abstract class Showable {
        abstract protected void show();
    }

Если существует только один классво втором пакете (скажем, ViewManager), который должен вызывать этот метод, вы можете встроить этот Showable в него, чтобы только этот класс мог вызывать метод show ().

Это не очень чистый дизайнхотя.

...