抽象类vs Concrete类?

时间:2012-05-07 06:21:03

标签: ruby oop class abstract-class concreteclass

我正在学习面向对象编程,但我对抽象类和具体类感到困惑。一些现实世界的例子将不胜感激。使用一个在另一个上有什么好处?什么时候会喜欢抽象类和具体类?

如果对Ruby

的背景下的任何语言的答案都是特定的

2 个答案:

答案 0 :(得分:3)

如果你有一个不能实例化的对象,你应该使用一个抽象类。但是,如果要实例化此类,则应使用具体类。

想象一下,你想要几个动物类。但规则只是实例化特定的动物,如狗,猫或老鼠。但现在所有这些动物都有一些属性和方法 - 比如名字。因此,您将它们放在基类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
}

答案 1 :(得分:0)

抽象类通常是具体类的基类。 (通过OO继承派生)Abstract类通常为具体类强制实现接口。但是Abstract类还可以通过方法和属性实现具体类使用的通用功能。

您无法实例化Abstract类,但只能实例化具体类,假设它们实现了所有必需的方法。