Тема: Де використовувати абстрактні класи, а де інтерфейси?
Привіт. Сьогодні йду додому з однокурсником, і почав пояснювати йому за класи, інтерфейси, та наслідування. Хтів привести два приклада, де треба використати наслідування класу, і де треба використовувати наслідування інтерфейсу, в результаті сам заплутався.
Я так розумію, всі ці наслідування треба використовувати як для виключення дублювання кода, так і для створення абстракції. В мене приклад був такий: є два види м'ячів, перший - дерев'яний, а другий - гумовий. Нам не зручно використовувати два контейнера для обох видів м'ячів і необхідно абстрагувати їх до одної сутності - мяч. Для цього я б використав абстрактний класс, і вийшло б щось типу цього
class Program
{
static void Main(string[] args)
{
ball[] i = new[] {(ball)new WoodenBall(),new RubberBall()};
foreach (var b in i)
{
Console.WriteLine(b.GetBall());
}
Console.Read();
}
}
abstract class ball
{
public abstract string GetBall();
}
class WoodenBall:ball
{
public override string GetBall()
{
return "WoodenBall";
}
}
class RubberBall : ball
{
public override string GetBall()
{
return "RubberBall";
}
}
А потім я хтів придумати приклад з використанням інтерфейсу, але чомусь не зміг. Звичайно, я можу замінити абстрактний клас на інтерфейс з сигнатурою одного метода, потім по різному реалізувати цей метод в відповідних класах, що наслідують той інтерфейс і в мене вийде те ж саме, що й з абстрактним класом. Навіщо ж тоді мені той інтерфейс взагалі потрібен? Я знаю, що можна наслідуватись від декількох інтерфейсів, але не зовсім розумію, де це може знадобитись?