Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чем интерфейсы отличаются от абстрактных классов? 
:(
    Опции темы
Elfet
  Дата 8.8.2007, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Чем интерфейсы отличаются от абстрактных классов?
Цитата
хотя использование и того и другого похоже, с логической точки зрения это разные сущности
класс определяет сущность т.е. отвечает на вопрос "кто есть я"
интерфейс определяет действие или набор действий выражаемых глаголами т.е. отвечает на вопрос "что я могу делать"
например интерфейс IComparable говорит лишь о том что объекты его реализующие можно сравнивать.
он ничего не говорит о сущности самих объектов, т.е. кто они
тогда как абстрактный класс Control говорит что объект является контролом(элементом управления) 

Какая мне разница на какие вопросы они отвечают?  smile 


--------------------
PM MAIL WWW Skype   Вверх
tol05
Дата 8.8.2007, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Абстрактные классы. В отличие от обычных классов, экземпляры их не могут быть созданы. Вот и все отличия. Поэтому абстрактные классы не могут содержать конструкторов. В остальном - отличий нет.

Интерфейсы (в отличие от классов, как обычных. так и абстрактных) не могут содержать:
- полей
- констант
- перегрузок операторов приведения типа
- перегрузок арифметических операторов
- вложенных типов

Интерфейсы описывают только поведение сущности (что может делать объект, реализующий интерфейс, через свои методы, какие он может генерить события и через какие свойства он может рассказывать о себе) smile
Классы же описывают как свое поведение, так и внутреннее состояние (чему равно в каждый отрезок времени каждое из полей класса)

И еще: можно реализовать множественное наследование интерфейсов, но нельзя реализовать множественное наследование от абстрактных классов. 

Это сообщение отредактировал(а) tol05 - 8.8.2007, 15:57


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
0000
Дата 8.8.2007, 17:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.7.2006
Где: Нижний Новгород

Репутация: 2
Всего: 5



интерфейс не описывает поведение
интерфейсы - это именованный набор сигнатур (названия методов, параметры и тип возвращаемого значения)
только названия и все, без кода
сделаны - для множественного наследования
PM MAIL ICQ   Вверх
ivashkanet
Дата 8.8.2007, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Elfet (Белый и Пушистый  smile ), где-то я уже это объяснял поищи по форуму (там просто будет полнее).

Отличия: 
1) интерфейс не может содержать реализации (в отличии от абстрактоно класса).
2) Класс-предок может быть только один (в отличии от интерфейсов, которых может быть целый вагон).

Если отрешиться от компьютера, то можно сказать следующее: Класс говорит о том "Кто/что такое этот объект", а интерфейс "Что он умеет делать" (как уже было сказано).
Пример.
Цепочка: "Абстрактный класс" Млекопетающие, наследник Человек показывает, что человек имеет те же свойства что и все млекопитающие: теплая кровь, рождается (а не вылупливается из яйца), для продолжения рода нужен и самец и самка, есть сердце, позвоночник, мозг, ...
Интерфейс же говорит, что умеет делать этот экземпляр.
Пример: "интерфейс" IВысшееОбразованиеСпециальностьПрограммист говорит, что чел "немножко" сечет в компьютерах и его можно брать на работу что-то-там набирать, отчеты, например.

И ты ды smile

Добавлено через 3 минуты и 16 секунд
P.S. Elfet, а в какой книжке так толково объясняют?
Там действительно довольно толково описали отличия. Мне понравилось. Именно такой стиль изложения я и люблю.

Добавлено через 11 минут и 10 секунд
Я приобщал товарища к абстрактным классам (что-то он черезчур увлекся интерфейсами)
Просто интересное задание с наследованием и интерфейсами
PM MAIL WWW ICQ   Вверх
OLEG_NET
Дата 8.8.2007, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 15.5.2007

Репутация: нет
Всего: 1



И еще,если класс наследует абстрактный класс,то его методы определенные как абстрактные должны быть переопределены(в интерфейсе это необязательно ) . 
PM MAIL   Вверх
Elfet
Дата 8.8.2007, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Цитата(ivashkanet @  8.8.2007,  18:36 Найти цитируемый пост)
Там действительно довольно толково описали отличия. Мне понравилось. Именно такой стиль изложения я и люблю.

Я не знаю. Это мы просто с другом обсуждали, это он цитировал. Спрошу у него smile

Как я понял интерфейсы и классы сделаны для более понятной структуры кода? Думую можно было бы их объеденить - ничего особо страшного не случилось бы? 


--------------------
PM MAIL WWW Skype   Вверх
mihryak
Дата 9.8.2007, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



Цитата(Elfet @  8.8.2007,  23:28 Найти цитируемый пост)
Думую можно было бы их объеденить - ничего особо страшного не случилось бы?  

Во многом повторю вышесказанное smile
И как бы тогда выглядел гибрид?
Одно из важнейших отличий - интерфейс на то и интерфейс, чтобы все объявленные свойства и методы торчали наружу, только public, другие модификаторы доступа невозможны.
От множественного наследования классов в .Нет разумно отказались (хотя пару раз приходилось немного расстраиваться по этому поводу - при невозможности изменить базовый класс и желании сделать его MarshalByRef), тут интерфейсы приходят на помощь.
В декларации, которой является интерфейс, странно было бы видеть уже готовую реализацию некоторых вещей и задействованные в них приватные поля.

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

Это сообщение отредактировал(а) mihryak - 9.8.2007, 00:44
PM MAIL ICQ   Вверх
ivashkanet
Дата 9.8.2007, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(Elfet @  8.8.2007,  22:28 Найти цитируемый пост)
Как я понял интерфейсы и классы сделаны для более понятной структуры кода?

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

Цитата(Elfet @  8.8.2007,  22:28 Найти цитируемый пост)
умую можно было бы их объеденить - ничего особо страшного не случилось бы?  

Не думаю smile Это совершенно разные вещи.
Цитата(mihryak @  9.8.2007,  00:28 Найти цитируемый пост)
Да, собственно, абстрактный класс ничем не отличается от обычного, за тем исключением, что его нельзя инстанцировать, и некоторые методы-свойства он отдал на откуп потомкам.

Точно ;-)
 smile 
Цитата(mihryak @  9.8.2007,  00:28 Найти цитируемый пост)
при невозможности изменить базовый класс и желании сделать его MarshalByRef

Тут подходит агрегация. Просто создай класс-контейнер или оболочку для твоего класса и будет все пучком ;-)
PM MAIL WWW ICQ   Вверх
mihryak
Дата 9.8.2007, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



 smile 
Цитата(ivashkanet @  9.8.2007,  09:46 Найти цитируемый пост)
Тут подходит агрегация. Просто создай класс-контейнер или оболочку для твоего класса и будет все пучком ;-) 

так и было сделано, но
Код

public class MyClass : MyBaseClass, MarshalByRef

смотрится понятнее и симпатичнее smile
PM MAIL ICQ   Вверх
ivashkanet
Дата 9.8.2007, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



 smile (последний, надеюсь)
Кстати, mihryak, где-то я читал, что твоя проблема --- одна из основных причин введения множественного наследования. Но траблы при неправильном использовании превышают все его приемущества.
PM MAIL WWW ICQ   Вверх
Naum
Дата 9.8.2007, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



Цитата(OLEG_NET @  8.8.2007,  21:57 Найти цитируемый пост)
в интерфейсе это необязательно

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


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
OLEG_NET
Дата 10.8.2007, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 15.5.2007

Репутация: нет
Всего: 1



Naum,согласен сморозил smile  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1081 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.