抽象类需要什么?

时间:2012-03-19 17:19:10

标签: oop

他们最近问我的一个面试问题。

  

C#中的抽象类是什么?   抽象类 - 是一个无法实例化的类。可以包括抽象或实例方法,构造函数等。

     

实例方法可用于为继承此抽象类的所有派生类实现通用功能。

好的......现在的问题是为什么我们需要一个抽象类来实现常用功能。我可以在基类中使用相同的常用功能,让派生类可以访问基类方法。如果是这样的话,而不是有一个抽象类..我可以去基类?或者将通用功能放在抽象类中,让派生类可以访问这些方法吗?

如果我的基类可以解决常见功能的实现,那么为什么我们需要一个抽象类来实现常用功能?

需要帮助才能正确理解......

4 个答案:

答案 0 :(得分:5)

抽象类基类 - 但它是一个基类,通常有一些抽象成员。这允许您在抽象类中编写代码,调用那些抽象成员,但没有任何实现......然后强制从抽象类派生的具体类来实现这些成员。

拥有抽象类而不仅仅是一些成员抛出NotImplementException的具体基类的好处是:

  • 强制派生类(在编译时)实现相关成员
  • 客户端不能只创建基类的实例;他们必须使用一个具体的课程,提供适当的"缺失"成员。

作为一个例子,前几天我在Json.NET中编写了一个扩展JsonConverter的抽象类类。目的是使它成为我项目中任何结构转换器的基类 - 它将处理所有可空类型转换(并将空JSON反序列化为空值),将派生类释放到只是专注于特定类型的部分。看看它(NodaConverterBase),看看它是否让事情更清楚。

答案 1 :(得分:1)

抽象类用作基类。有时您可能希望实现通用功能但不直接实例化基类类型的实例,因此您将使用抽象类。

答案 2 :(得分:0)

以这种方式看待它,如果你正在编写一个应用程序来跟踪动物园的动物,你会有猴子,大象,鳄鱼等课程...它们都是动物,所以你会让它们继承一个基类动物(因为它们都需要基本的功能,如吃,呼吸等......)。但是你永远不会有一只只是动物的动物,所以你会让动物抽象,因为你永远不需要它的实例。

答案 3 :(得分:0)

棘手的短语是

"partial implementation."

除了你在帖子中提到的内容之外,抽象类不必实现所有函数,子类必须实现未实现的函数或者自己声明为抽象。