2010-11-08 2 views
8

Можно создать дубликат:
Interface vs Abstract Class (general OO)В чем разница между интерфейсом и абстрактным классом?

Я не совсем ясно, на разнице.

Благодаря

+3

есть много сообщений об этом: http://stackoverflow.com/questions/761194/interface-vs-abstract-class-general-oo – skaz

+0

~ Алмонд Радости имеют орехи, курганы не делают. ~ За исключением замены «Almond Joys» с абстрактными классами, «Mounds» с интерфейсами и «орехами» с некоторыми конкретными методами. – Powerlord

ответ

17

Они очень похожи, но есть некоторые важные технические различия:

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

Эти различия влияют, как должны быть использованы два метода:

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

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

3

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

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