2010-06-04 3 views
4

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

+0

Возможный дубликат [Интерфейс vs Абстрактный класс (общий OO)] (http://stackoverflow.com/questions/761194/interface-vs-abstract-class-general-oo) –

+0

Возможный дубликат [Абстрактный класс vs Интерфейс в Java] (http://stackoverflow.com/questions/10040069/abstract-class-vs-interface-in-java) – nawfal

ответ

2

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

Вот хорошая ссылка сравнивая два: Interface vs. Abstract Class

2

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

0

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

5
  • Класс может реализовывать несколько интерфейсов, но он может распространять только один абстрактный класс.
  • Интерфейсы позволяют создавать прокси-серверы, которые инкапсулируют конкретный класс. Это широко используется каркасами, чтобы перехватывать вызовы методов конкретному классу (например, для запуска транзакции до выполнения метода или для записи в журнал).
1

Java не имеет множественного наследования; таким образом, вы не можете иметь класс, который реализует сразу два абстрактных класса. Например, если вы хотите использовать MouseListener и ActionListener в одном классе, вы должны сделать это способом интерфейса.

6

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

Интерфейс представляет собой структуру программирования, в которой вы определяете свои функции/службы, которые вы хотите открыть публичным или другим модулям. Вид контракта, в котором вы обещаете, что предоставляете некоторые функции или услуги, но скрываете реализацию, чтобы можно было изменить реализацию, не затрагивая ваш контракт.

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

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

0

Чтобы предоставить WebServices или выполнить тесты JMock, вам не нужна фактическая реализация, вам просто потребуется определение интерфейса. Подумайте об этом, нет необходимости возвращать реализацию третьей стороне, когда все, что им нужно сделать, это вызвать ваш API.

0

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

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