OriginalGriff
Абстракция используется, когда вы хотите "собрать" классы вместе, но базовый класс не является чем-то, что существует само по себе.
Подумайте о реальном мире: яблоки существуют, апельсины существуют - и они оба фрукты, которые также существуют. И вы можете очистить яблоко, вы можете очистить банан - хотя способ, которым вы это делаете, отличается.
Но... вы не идете в магазин и не покупаете "фрукты" - вы покупаете 4 яблока или 6 бананов.
В компьютерных терминах fruit - это абстрактный класс, он не может быть создан; Вы не можете создать Fruit, но вы можете содержать любой класс, производный от Fruit, в переменной Fruit:
public abstract class Fruit
{
public Color Colour { get; set; }
public abstract void Peel();
}
public class Apple : Fruit
{
public override void Peel()
{
...
}
}
public class Orange : Fruit
{
public override void Peel()
{
...
}
}
...
Fruit myFruit = new Apple();
myFruit = new Pomegranate();
myFruit = new Lime();
Фрукт-это
abstract
класс, Apple-это конкретный класс.
Поскольку Fruit требует, чтобы все производные классы реализовали метод Peel, вы можете вызвать его для любой переменной Fruit, и он вызовет правильный для фактического экземпляра Fruit.
Fruit myFruit = new Apple();
MyFruit.Peel();
myFruit = new Banana();
MyFruit.Peel();
myFruit = new Lime();
MyFruit.Peel();