Концептуальная разница: полностью абстрактный класс v. Интерфейс - PullRequest
1 голос
/ 11 января 2012

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

Насколько я понимаю, классы используются для конкретных объектов и интерфейсов для функций, которые эти объекты могут демонстрировать.Итак, если бы я создавал класс автомобиля и хотел, чтобы в этом автомобиле была функция навигации, я бы сделал правильный интерфейс навигации, а не абстрактный класс?(Заменить на любую функцию, например, автоматическую парковку и т. Д.)

Ответы [ 4 ]

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

Вы правы.

Лодка или самолет также могут иметь функцию автоматической парковки или систему навигации.Но в большинстве моделей что-то является либо лодкой, либо автомобилем (давайте оставим летающие машины вне дома ...).

Практически, в Java абстрактный класс - это хороший способ навязать расширение в конкретном (уникальном) категория.Если у вас есть AbstractPlane и AbstractBoat, вы уверены, что объект является либо тем, либо другим.

1 голос
/ 11 января 2012

Теоретическая разница между ними здесь не по теме, вы можете спросить у http://programmers.stackexchange.com.

Ближайший вопрос по теме - что вы можете с ними сделать, о чем вы, вероятно, уже знаете - class может implement два interfaces, он может extend только один class.

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

Да, вы на правильном пути. Думайте об этом так. У тебя есть фрукт. Но вы не знаете, какой это может быть. Таким образом, вы создаете интерфейс, который теперь зависит от пользователя, как он может использовать этот интерфейс. Это может быть яблоко, апельсин или персик. Фрукты интерфейса будут иметь определенный размер, цвет и окружающую среду. Хотя эта информация меняется в зависимости от разных видов фруктов.

Другими словами, интерфейс - это скелет чего-то очень специфического, чего вы пытаетесь достичь в долгосрочной перспективе.

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

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

Относительно вашего примера верно.Класс - это собрание двух основных вещей: данных и методов для работы с этими данными.

...