2010-09-27 3 views
0

Возможные Дубликаты:
Abstract classes vs Interfaces
Abstract class and Interface class?, когда нам необходимо реализовать abastract класс и когда интерфейс

Привет, У меня есть немножко путаницы относительно использования абстрактного класса и Interface, , когда нам нужно реализовать абстрактный класс и когда интерфейс.

Благодаря Vijendra Сингх

+0

дубликат http://stackoverflow.com/questions/761194/interface-vs-abstract-class-general-oo –

ответ

1

В общем:

Интерфейсы должны быть использованы в любой ситуации, где важно то, что делает класс, не обязательно, что это такое. Класс, который может, например, создать собственную копию, может делать много других вещей, кроме того, но когда вы только заботитесь о возможности копирования объекта, вам остается только, чтобы объект реализовал ICloneable. Кроме того, интерфейсы полезны, когда реализация набора функций не используется; например, возможность вывода результатов вычисления может быть в виде файла, консоли или сети. Эти три реализации совершенно разные, но все они могут выглядеть одинаково для класса, которому нужен IOutputWriter.

Тезисы обычно используются для совместного использования кода. Абстрактный класс, в отличие от интерфейса, может определять логику метода, которую могут использовать его дети. BitmapImagePrinter работает конкретно с типом файла Bitmap, но ему нужна такая же логика, как JpegImagePrinter, чтобы фактически получить доступ к принтеру; так что эта логика может идти в AbstractImagePrinter. Тезисы также полезны, когда класс является более важным, чем то, что он делает. CheckingAccount и SavingsAccount являются BankAccounts, хотя они ведут себя по-разному.

Есть и другие особые случаи, когда вы ДОЛЖНЫ использовать тот или иной, но в целом это основное отличие.

0

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

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

0

Это уже обсуждалось несколько раз ссылаются this -

Реализовать абстрактные классы, когда вы хотите, поведение некоторых по умолчанию наследуется всеми классами, как это имеет смысл тогда использовать абстрактные классы.

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

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