Я пытаюсь придумать полный ответ на:Java 8 - интерфейсы с методами по умолчанию против абстрактных классов
«почему/когда использовать абстрактный класс, а не интерфейс.»
и ищет подтверждения/предложения по следующему.
Ответ на это,
«обеспечить реализацию некоторых из него. До того, как конкретные классы приходят, чтобы определить конкретные типы, абстрактный класс, как правило, прямо ниже интерфейса в иерархия наследования (как и во многих своих примерах в Java API) реализует и связывает некоторые общие аспекты структуры, которую определяет интерфейс.
Еще одна веская причина для использования абстрактного класса заключается в том, что существует четкая логическая иерархия среди типов. Абстрактный класс использует для организации иерархию , заставляя, будучи абстрактным классом, а не конкретным, создание объектов только на конкретных классах ниже в этой иерархии, где они полностью определены и, следовательно, имеют смысл. "
Затем, в связи с этим, приходит Q:
«, так как Java 8, интерфейсы могут определить default method реализации Почему я не писал бы по умолчанию метод (ы) в интерфейсе вместо. ? абстрактный класс, который реализует этот метод (ы) "
ответ на этот вопрос будет:
« Одна из причин: все методы интерфейса являются общедоступными, членами поля являются все константы (окончательный & публичный). Вы можете ограничить права доступа к методам и/или заставить их работать с непостоянным состоянием.
Другое: класс потомков может вызвать метод (ы) абстрактного класса супер, тогда как он не может сделать это по методам интерфейса по умолчанию. Кроме того, интерфейс не имеет конструкторов, которые будут вызываться потомками.
Остальные причины такие же, как и в пред-Java 8 выше. ? "
Кроме них выше, почему бы я лучше пойти для абстрактного класса, чем интерфейс, особенно теперь, когда у меня есть методы интерфейсных по умолчанию, так как Java 8
Пожалуйста, обратите внимание: я видел Java 8 default methods vs. non-abstract methods in abstract classes и Interface with default methods vs Abstract class in Java 8 наряду с некоторым другим полезным обсуждением. Это Вопрос скорее о , почему выбрал абстрактный класс через интерфейс, чем наоборот.
ТИА.
Хотя я думаю, что это правильный вопрос, я не уверен, что он является ontopic для StackOverflow. Вы можете попробовать [Programmers.SE] (programers.stackexchange.com). – nhaarman