Абстрактный класс против конкретного класса?

Я изучаю объектно-ориентированное программирование, но меня смущает абстрактный класс и конкретный класс. Некоторые реальные примеры будут оценены. И каковы преимущества использования одного над другим? Когда предпочтут абстрактный класс и конкретный класс?

Если ответ является специфическим для любого языка, чем я спрашиваю в контексте Ruby

2 ответа

Решение

Если у вас есть объект, который не должен быть создан, вы должны использовать абстрактный класс. Тем не менее, конкретный класс следует использовать, если вы хотите создать экземпляр этого класса.

Представьте, что вы хотите несколько классов животных. Но правило состоит в том, чтобы просто создавать экземпляры конкретных животных, таких как собака, кошка или мышь. Но теперь все эти животные имеют некоторые свойства и методы - например, имя. Таким образом, вы положили их в базовый класс Animal чтобы избежать дублирования кода. Вы не можете создать экземпляр Animal хоть:

public abstract class Animal
{
    public string Name { get; set; }
    public void Sleep()
    {
        // sleep
    }
}

public class Cat : Animal
{
    public void Meow()
    {
        // meooooow
    }
}

public void DoSomething()
{
    var animal = new Animal(); // illegal operation
    var cat    = new Cat();    // works fine
}

Абстрактный класс обычно является базовым классом для конкретных классов. (получено через OO-наследование) Класс Abstract обычно обеспечивает интерфейс для конкретных классов. Но абстрактный класс также может реализовывать общую функциональность, которая будет использоваться конкретными классами через методы и атрибуты.

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

Другие вопросы по тегам