Интерфейс или абстрактный класс.Что подходит лучше в моем случае использования? - PullRequest
0 голосов
/ 25 января 2012

Предположим, у меня есть требование, где у меня есть форма, которая содержит область только как операцию.Так я должен пойти на интерфейс или абстрактный класс с area () в качестве абстрактного метода?Причина, по которой стоит задать этот вопрос: в чисто объектно-ориентированном термине все поведение отображается на метод, а атрибут - на элемент данных.Таким образом, область является поведением или (рассчитанным) атрибутом класса?И какой из них лучше для конкретного случая использования?Интерфейс с областью () как метод или Абстрактный класс с областью () как абстрактный метод?

Ответы [ 3 ]

2 голосов
/ 25 января 2012

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

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

Так что у меня будет Shape Interface с area() метод, поскольку область реализации вычисляемой фигуры будет варьироваться, не имеет смысла иметь класс Abstract.

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

0 голосов
/ 25 января 2012

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

0 голосов
/ 25 января 2012

Поскольку java не поддерживает множественное наследование, в этом случае вам лучше работать с интерфейсом, так как тогда вы не так уж сильно привязаны. Вы не описываете какие-либо другие общие поведения или атрибуты, которые должен совместно использовать этот тип объекта, который укрепил бы случай для абстрактного класса. Например, если у вас есть другой общий метод, общий для всех фигур, который использует выход области, это будет случай использования абстрактного класса. Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...