我正在学习面向对象编程,但我对抽象类和具体类感到困惑。一些现实世界的例子将不胜感激。使用一个比另一个有什么好处?什么时候更喜欢抽象类和具体类?
如果答案比我在上下文中所要求的任何语言都特定Ruby
我正在学习面向对象编程,但我对抽象类和具体类感到困惑。一些现实世界的例子将不胜感激。使用一个比另一个有什么好处?什么时候更喜欢抽象类和具体类?
如果答案比我在上下文中所要求的任何语言都特定Ruby
如果你有一个不能被实例化的对象,你应该使用一个抽象类。但是,如果要实例化此类,则应使用具体类。
想象一下,你想要几个动物课程。但规则只是实例化特定的动物,如狗、猫或老鼠。但现在所有这些动物都有一些属性和方法——比如名字。所以你把它们放在一个基类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 继承)抽象类通常为具体类强制执行接口。但是抽象类也可以通过方法和属性实现具体类使用的通用功能。
您永远无法实例化抽象类,而只能实例化具体类,假设它们实现了所有必要的方法。