Использование аннотации и интерфейса - PullRequest
1 голос
/ 17 февраля 2012

Это очень простой, но вдумчивый вопрос, с которым я сталкиваюсь во многих интервью Почему нам действительно нужны абстрактные классы и интерфейс , даже если мы можем реализовать их просто наследованием. (технически говоря, делая функции и переопределяя их). Что бы осталось без создания абстрактных классов и интерфейса в OOPS

Спасибо

Ответы [ 3 ]

3 голосов
/ 17 февраля 2012

Абстрактные классы позволяют вам заложить фундамент для остальной части вашего кода.Вы можете создать частично реализованный класс, а затем разрешить пользователям создавать его конкретные экземпляры, более специфичные для их требований.Общая функциональность остается в абстрактном классе.Аналогия с реальным миром - это пункт проката автомобилей.Они нанимают «машины».Понятие «автомобиль» является абстрактным классом и может иметь в своей системе различные методы, которые разрешают аренду и возврат, а также такие свойства, как страховая группа, суточная ставка и т. Д. Однако нет клиент может подняться донанять магазин и нанять «машину».Они нанимали Форд Фокус, Мерседес, Шкоду Фабию или что угодно.Таким образом, это конкретные экземпляры абстрактного класса, и они вполне могут быть представлены в объектно-ориентированной системе с конкретными классами, производными от 'car'.
Интерфейсы, с другой стороны, допускают полиморфизм .Это когда объект одного класса начинает вести себя как один из другого.Я человек, который ведет машину.Я не являюсь объектом «водителя» (как я делаю много других вещей), но меня вполне можно считать имеющим интерфейс «водителя», который позволил бы получить доступ к моим данным водительских прав и тому подобное.

1 голос
/ 17 февраля 2012

Абстрактные классы могут содержать частично реализацию некоторой функциональности с отличием от интерфейсов, которая не содержит никакой реализации, а представляет собой просто объявления виртуальных методов.Основная причина использования интерфейса заключается в том, что если вы действительно ничего не знаете о классе, за исключением того, как с ним взаимодействовать (это даст больше абстракции вашему коду), - интерфейс его более абстрактный, чем класс abstact.С другой стороны, класс Abstact является лишь частичным представлением физического объекта.Также в c ++ интерфейсы могут быть экспортированы из dll с разницей с абстрактными или простыми классами.

0 голосов
/ 17 февраля 2012

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

Я объяснил свой взгляд на эту тему в статье, доступной на моем сайте.

http://nazar -merza.com /

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

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