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