Interfaces
используются, когда есть универсальные методы, которые должны быть реализованы для полной реализации контракта интерфейса.
Abstract
классы используются, когда есть некоторые частичные поведение по умолчанию реализации Interface
, которая может быть разделена между большинством расширяющихся классов.Обычно Abstract
класс implements
некоторый Interface
и обеспечивает частичное поведение по умолчанию для некоторых методов.
Так что у меня будет Shape Interface
с area()
метод, поскольку область реализации вычисляемой фигуры будет варьироваться, не имеет смысла иметь класс Abstract
.
Пример. Круги, треугольники и прямоугольники имеют совершенно разные формулы для расчета площади.Реализация Abstract
класса FourSidedPolygon
может быть подходящей для наследования классов Square
и Rectangle
, это, вероятно, пустая трата усилий, поскольку они являются просто специализацией универсального класса Polygon
, который будетбольше подходит для некруглых объектов.