43

从非抽象类派生抽象类是否可以,还是这种方法有问题?

这是一个小例子:

public class Task {
  // Some Members
}

public abstract class PeriodicalTask : Task {
  // Represents a base class for task that has to be done periodicaly.
  // Some additional Members
}

public class DailyTask : PeriodicalTask {
  // Represents a Task that has to be done daily.
  // Some additional Members
}

public class WeeklyTask : PeriodicalTask {
  // Represents a Task that has to be done weekly.
  // Some additional Members
}

在上面的示例中,我不想将 Task 类抽象化,因为我想直接实例化它。PeriodicalTask​​ 应该从 Task 继承功能并添加一些额外的成员,但我不想直接实例化它。仅应实例化 PeriodicalTask​​ 的派生类。

4

4 回答 4

59

我认为这种方法没有任何问题。

您可能有一些可以用具体术语来描述的基本类型。现在,仅仅因为这种类型的对象可以根据某个子类型进一步分类,并不意味着所有这些子类型都一样具体;它们可能反过来需要进一步具体化,事实上。

真实世界的例子:

Person--具体(非抽象)
Sibling: Person--抽象
Brother: Sibling--具体
Sister: Sibling--具体

于 2010-04-08T19:16:58.693 回答
18

它没有错。

如果您查看像 WinForms 这样的大层次结构,您会发现有好几层抽象类型。

MSBuild 任务也是一个很好的(和更相关的)示例。

于 2010-04-08T19:16:09.787 回答
16

这种事情一直在发生:所有抽象类都继承自System.Object,一个不是abstract自己的类。

new System.Object()有时对锁定很有用,如果你周围没有其他东西,你可以锁定。

于 2010-04-08T19:18:21.233 回答
0

在这里使用抽象不是正确的方法,例如,使用受保护的或内部构造函数。这将阻止直接创建 PeriodicalTask​​ 的实例,但它的派生类仍然可以访问它。

于 2010-04-08T19:15:47.993 回答