Интерфейсы по сравнению с абстрактными классами [дубликат]

В папке ресурсов

Сделайте файл application.yml, application-local.yml, application-dev.yml и т. Д. Все, что вы хотите

и затем в приложении. yml

 spring.profile.active = ${ENV}

теперь во время выполнения укажите переменные ENV из конфигурации run / debug в Intellij или укажите профиль, для которого вы хотите создать jar, в application.yml.

В качестве альтернативы вы можете использовать -D spring.profile.active = dev

120
задан Patrick Hofman 24 March 2017 в 15:41
поделиться

4 ответа

Преимуществами абстрактного класса являются:

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

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

136
ответ дан Stefanos Kargas 24 November 2019 в 01:38
поделиться

Абстрактные классы и интерфейсы семантически различны, хотя их использование может перекрываться.

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

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

79
ответ дан Guffa 24 November 2019 в 01:38
поделиться

Реальный вопрос: использовать ли интерфейсы или базовые классы. Это было покрыто раньше.

В C # абстрактный класс (помеченный ключевым словом «абстрактный») - это просто класс, из которого нельзя создавать объекты. Это служит иной цели, чем простое различие между базовыми классами и интерфейсами.

5
ответ дан Dave Van den Eynde 24 November 2019 в 01:38
поделиться

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

8
ответ дан Zifre 24 November 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: