从非抽象类派生抽象类是否可以,或者这种方法有问题吗?
这是一个小例子:
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的派生类。
答案 0 :(得分:56)
我认为这种方法没有任何问题。
您可能有一些基本类型可以用具体术语来描述。现在,仅仅因为这种类型的对象可能会根据某个子类型进一步分类,并不是说所有这些子类型都具体;他们可能反过来要求进一步具体化。
真实世界的例子:
Person
- 具体(非抽象)
Sibling: Person
- 抽象
Brother: Sibling
- 具体
Sister: Sibling
- 具体
答案 1 :(得分:18)
没有错。
如果你看一下像WinForms这样的大层次结构,你会发现几层抽象类型。
MSBuild任务也是一个很好的(也是更相关的)示例。
答案 2 :(得分:13)
这种事情一直在发生:所有抽象类都继承自System.Object
,这个类本身不是abstract
。
new System.Object()
有时对锁定很有用,如果你周围没有任何东西,你可以锁定。
答案 3 :(得分:0)
然后,使用抽象不是正确的方法,例如,使用受保护或内部构造函数。这样可以防止直接创建PeriodicalTask的实例,但是它的派生类仍然可以访问它。