Почему частные методы в Java неявно являются окончательными?

1

Я хотел указать эти строки в книге "Java в двух словах", что вызвало у меня некоторую путаницу:

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

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

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

Правильны ли мои утверждения?

  • 2
    окончательные методы не могут быть переопределены. Это все, что делает финал. Они могут или не могут быть вызваны подклассами в зависимости от их модификатора видимости (общедоступный, закрытый, защищенный или нет). docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
  • 1
    В тексте говорится, что private методы являются final , а не иначе. Итак, методы Final не могут быть переопределены, но их можно вызывать из подкласса , это недоразумение. Второе утверждение верно.
Показать ещё 2 комментария
Теги:
override
private
final

3 ответа

2
Лучший ответ

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

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

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

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

1

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

частный

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

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

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

0

final отклонение

private не может использоваться во внешнем классе, таком как подкласс.

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню