2012-02-17 5 views
1

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

Благодарности

+0

Возможный дубликат [В чем разница между интерфейсом и абстрактным классом?] (Http://stackoverflow.com/questions/1913098/what-is-the-difference-between-an-interface-and-abstract- класс) – Sarfraz

+0

@Sarfraz: Я хочу сценарий реального времени, где он может быть использован. –

ответ

3

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

+0

: wow это замечательное объяснение –

+0

: Могу ли я получить больше примеров или любой URL-адрес для чтения этих концепций. –

+0

Не с головы. Я должен был однажды обучить ООП, и поэтому я сам это сделал. – deadlyvices

1

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

0

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

Я объяснил свое мнение по этому вопросу в статье, имеющейся на моем веб-сайте.

http://nazar-merza.com/

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

Смежные вопросы