2015-12-18 2 views
5

При скрытии статического поля нет ограничений на том, какой уровень доступа имеет поле в подклассе, он может быть даже нестационарным и другого типа данных.Почему Java ограничивает модификатор доступа метода скрытия

С другой стороны, при скрытии статического метода статический метод из подкласса, который скрывает статический метод от суперкласса, может обеспечить больше, но не менее доступ, чем скрытый метод.

AFAIK, связывание статического метода в любом случае выполняется во время компиляции, так почему такое ограничение?

P.S. Вопрос только из любопытства.

+4

подозрения Джона (я Бесполезным 't отметьте его как дубликат, так как ответ просто подтверждает его на основе JLS, в то время как ваш вопрос больше о том, почему JLS спроектирован именно так): http://stackoverflow.com/questions/26963828/reducing-the-visibility-of-a -static-метод. О полях: они не являются полиморфными (независимо от того, являются ли они статическими или нет, поэтому нет смысла ограничивать диапазон их изменений). – Pshemo

+1

Предпочтительно ваше сообщение pre-edit –

+2

Восстановлено до предварительно отредактированного состояния. Просто не хочу, чтобы люди понимали вопрос: «Почему для полей разрешено, а для методов - нет». – Bax

ответ

-2

Потому что в подклассе вы переопределяете не закрытый метод суперкласса, а тени. Что касается установления более широкого уровня доступа - вы всегда можете написать что-то вроде

public void sublcassMethod() { 
    supersecretSuperclassMethod(); 
} 

, так что нет смысла ограничивать перекрывая более широкий доступ на уровне языка - такое ограничение может быть легко совершенно

+0

Вопрос о статических методах. – chrylis

+0

да, я знаю. Но затмение в такой ситуации скажет нам: «Невозможно уменьшить видимость унаследованного метода из суперкласса». Так что, я думаю, механизм наследования такой же, какой бы статичный или нестационарный метод не был. –

+0

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

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