2014-11-22 3 views
1

Я хотел бы отметить эти строки в книге «Java в миниатюре», которая вызвала у меня некоторое замешательство:Почему частные методы в Java неявно окончательно?

частные методы не наследуются подклассами и, следовательно, не может быть отменено (т.е. все частные методы неявно окончательный).

Я интерпретировал, что все частные методы являются окончательными, и я понимаю, что:

  • Финальные методы не могут быть переопределены, но они могут быть вызваны из подкласса.
  • Частные методы не могут быть переопределены, и их нельзя вызывать из подкласса.

Являются ли мои утверждения правильными?

+2

окончательные методы нельзя переопределить. Это все окончательно. Они могут или не могут быть вызваны подклассами в зависимости от их модификатора видимости (public, private, protected или none). https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html –

+1

В тексте говорится, что методы 'private' являются' final', а не иначе. Итак, * Окончательные методы не могут быть переопределены, но они могут быть вызваны из подкласса *, это недоразумение. Второе утверждение верно. –

+0

Вы правы. В то время я не думал о видимости. – gibarsin

ответ

2

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

Это может быть или не быть правдой, в зависимости от модификатора, и где находится ваш класс переопределения. Если метод является приватным или по умолчанию (без модификатора), вы не можете вызывать метод из подкласса, если ваш подкласс не находится в одном пакете.

Частные методы не могут быть переопределены, и их нельзя вызывать из подкласса.

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

1

По-моему, это поможет, если вы подумаете об этих ключевых словах в деле succesion.

частный

это модификатор доступа, он утверждает, к какому классу можно увидеть этот метод. (т. е. только этот класс, подкласс, другой класс в пакете). Следовательно, любой метод, который помечен как private, можно увидеть только из одного класса. Поэтому ваше утверждение верное, так как метод, помеченный как private, не может быть замечен из любого подкласса, не говоря уже о переопределении или вызове.

окончательный

это заявляет, что ничего жгутов в {} этого метода не может быть изменен извне. Следовательно, любой метод, помеченный как final, нельзя переопределить. Однако метод, помеченный как final, может быть вызван из других классов в зависимости от его модификатора доступа. Поэтому ваше утверждение о финале также верно, но опять же часть вызова зависит строго от модификатора доступа метода.

0

final могу переопределить

private не может использовать в внеклассной таких как подкласс.

private методы неявно окончательное, так что вы не можете изменить.

final метод не всегда частный, так что вы можете получить доступ в подклассе, если это не является приватным.

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