2014-04-04 2 views
3

Учитывая, что теперь интерфейсы могут дать реализацию методам, которые он предоставляет, я не могу правильно рационализировать разницу между интерфейсами и абстрактными классами. Кто-нибудь знает, как правильно объяснить разницу?Фундаментальное различие между интерфейсом и абстрактным классом в Java 8

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

ответ

15

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

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

+0

Спасибо! Первая причина дает мне очень четкую разницу между ними. –

+0

только интерфейсы могут быть расширены как функциональные интерфейсы, абстрактные классы не могут использоваться в lambdas. – aepurniet

1
  1. класс может наследовать только от одного другого класса, но может реализовать множество интерфейсов
  2. интерфейса не может иметь какие-либо полей, ожидает определения констант, в то время как абстрактный класс может
  3. абстрактный класс может определять конструктор, а интерфейс не может

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

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

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