Кога да използвам interface и кога abstract class


4

Някой може ли кратко и ясно да ми обясни кога се използват interfaces и кога abstract class.

До колкото разбрах интерфейсите ни задължават да имплементираме всичко в тях а абстрактния клас, се наследява от наследника и не ни задължава да имплементираме неговите полета и методи.




Отговори



12

Можеш да имаш интерфейс IFly, със метод Fly. Можеш да приложиш този интерфейс на обектите Самолет и Птица, които сами да си ги имплементират. Птицата маха с криле, а Самолета използва двигатели. Летят, но сами си имплементират начина, по който го правят. Логично ли е да наследяват абстрактен клас тези два обекта? 

А когато имаш, Гълъб и Щъркел е по-удачно да използваш абстрактен клас, "Птица", в който да имаш virtual метод Fly. В случая двете ни животни летят по един начин и могат да имплементират метода Fly директно от абстрактният клас "Птица". Ако по-някаква причина решиш, можеш да override-неш метода Fly и да му направиш имплементация във Класа Гълъб, а класа Щъркел, ще запази оригиналната имплементация на класа "Птици".


от Tony_Nikolov (633 точки)


3
Страхотен отговор! Благодаря! За съжаление не мога да дам палец нагоре, защото нямам нужните точки.

от tomhafner (75 точки)

2

В тази връзка имаше един виц, който много добре обясняваше абстракцията:

Една жена имала мъж и любовник. И двамата са наследници на обекта Човек, но реагират по различен начин, когато тя им казала, че е бременна.


от kalin.dimchev (645 точки)