Почему реализация классов не может определить переопределяющий метод как статический?
=====================================================================================

Я запутался, почему не допускается следующее:

Я понимаю, почему метод в интерфейсе не может быть статичным, но почему не может быть переопределяющий метод?

Я хочу, чтобы все классы реализовали`getInstance(String name)` метод, но в настоящее время я ограничен возможностью вызова метода только в том случае, если объект уже был создан, какой тип побеждает цель ...

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

евозможно вызывать статические методы полиморфно, устраняя необходимость`@Override`.

Обратите внимание, что этот подход не универсален для всех языков: например, вы можете переопределитьclass methods в Objective-C и в структурах Apple для какао этот механизм хорошо используется для настройки их «фабрики» классы. Однако в Java, методы классов C ++ и C # не поддерживают полиморфное поведение.

Теоретически, разработчики Java могли бы позволить вам предоставлять реализации метода интерфейса через`static` методы, если реализации не требуется доступ к состоянию из экземпляра. Но того же поведения легко достичь с помощью тривиальной оболочки:

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



о не имеет особого смысла. Представьте себе этот вариант использования, предполагая, что вы хотите, было бы возможно:

Теперь я хочу вызвать этот метод с реализацией`MyInterface` (учебный класс`A`), но так как я не могу передать сам класс, мне нужно передать объект:

сейчас внутри`foo` `static` переопределение`getInstance` вызывается по экземпляру класса`A`, Так что теперь я застрял с созданием объекта просто для вызова статического метода.

Я хочу сказать, что вы все равно будете вынуждены создавать объект в большинстве случаев использования полиморфизма, поскольку в вашем исходном интерфейсе метод был методом экземпляра.



 что значит реализовать интерфейс. Когда класс реализует интерфейс, это обещание, что каждый экземпляр класса будет реагировать на каждый метод в интерфейсе. Когда вы реализуете метод как статический, вы делаете возможным вызов методаwithout экземпляр класса - но это не соответствует обещанию реализации наследования, что метод будет вызываться в каждом экземпляре класса.



**type** интерфейса. Это означает**instances** необходимо иметь методы, определенные типом, а не классом экземпляров.

Другими словами,

`public void mymethod`

а также

`public static void mymethod`

НЕ одно и то же объявление метода. Они совершенно разные. Если`mymethod` определяется на интерфейсе, второе определение просто не удовлетворяет реализации интерфейса.