2010-08-25 3 views
3

Можно создать дубликат:
Why can’t I declare static methods in an interface?Почему интерфейс не поддерживает статический метод?

Внутри корпуса интерфейса мы не можем объявить или определить любой статический метод. Какова причина? Может ли кто-нибудь ответить на этот вопрос?

+0

Вы должны указать, на каком языке вы говорите. – mikek3332002

+0

http://stackoverflow.com/questions/21817/why-cant-i-declare-static-methods-in-an-interface http://stackoverflow.com/questions/512877/why-cant-i-define- a-static-method-in-a-java-интерфейс http://stackoverflow.com/questions/129267/why-no-static-methods-in-interfaces-but-static-fields-and-inner-classes-ok –

+0

Я добавил тег Java, так как его единственный вопрос явно касается интерфейсов Java. – Chuck

ответ

2

Предполагается, что вы говорите о Java, так как это самый популярный язык, который имеет типы interface. Вероятно, потому, что разработчики Java поняли, что интерфейсы заключаются в контрактах, а реализация в них не входит. Общий стиль Java, по-видимому, способствует строгости, то есть запрещает вещание, если нет веских оснований разрешать их, а не наоборот.

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

+1

+1 - очень похоже на то, что Я собирался сказать, только лучше. :) Если вы хотите статический метод в иерархии классов, попробуйте использовать абстрактный базовый класс, а не интерфейс (если это работает?). –

+1

@Will: да, это сработает. Я думаю, что это уродливый дизайн, но это просто субъективно. Однако вы должны помнить об одном: если вы добавляете статические методы в разных точках иерархии классов: вы не можете переопределить статический метод, вы можете его только отбросить. Что это означает: если X является родительским классом Y, и оба они имеют открытый статический метод f(), тогда в некоторых ситуациях может быть трудно сказать, какую версию f() вы на самом деле вызываете. –

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