2013-10-15 1 views
0

Почему компилятор JAVA не дает ошибку, когда у нас есть общедоступные методы внутри класса по умолчанию?Почему компилятор не дает ошибку, когда у нас есть общедоступные методы внутри класса по умолчанию

Когда мы непубличные классов (позволяет говорить с уровнем доступа по умолчанию), и если у нас есть общественные методы в этом классе следующим образом,

class Main { 

    public void doStuff() { 

    } 
} 

, то мы не можем получить доступ к выше DoStuff() метод с внешней стороны такой же упаковка. Но законным является модификатор общедоступного доступа для замедления метода. Так в чем его цель?

+0

методы могут быть вызваны посредством рефлексии, а также - afair javac дает уведомление в этом случае –

+0

, потому что в древние дни Java вы могли «импортировать» из пакета по умолчанию; thats они большие вещи о обратной совместимости, это hamstrings будущее для поколений без причины. –

ответ

2

Потому что это не ошибка, и потому, что может потребоваться избежать ошибки: например, если это реализация интерфейса.

2

Нет никакого вреда в предоставлении public доступа к членам классов с видимостью пакета: нет никакого противоречия в определении его таким образом, поэтому его позволяет компилятор.

Тем не менее, вы, безусловно, правы в том, что создание класса видимого пакета public не расширяет его видимость: если класс владельца имеет видимость пакета, что делает все его публичные элементы видимыми в пакете также не изменятся что-нибудь.

1

Кто-то из того же пакета может создать экземпляр Main и передать его другому классу в качестве объекта или интерфейса. В первом случае методы, подобные toString() и equals(), должны быть общедоступными, в последних методах этого Интерфейса должно быть.

 Смежные вопросы

  • Нет связанных вопросов^_^