假设我有几节课:
public class ParentClass
{
<common functionality>
...
}
public class ChildClass : ParentClass
{
<additional functionality>
...
}
在我的代码中,我同时使用了
ParentClass
和ChildClass
类型的对象-有时我不需要ChildClass
上的额外功能,有时我需要。 (实际上涉及到几代的类,但让我们保持简单。)是否有一种方法可以使它,如果我这样声明一个对象:public ParentClass thing;
我以后将无法将
thing
定义为:thing = new ChildClass();
我希望多态性能够达到
ChildClass
继承所有ParentClass
功能的程度,但是我不希望在定义对象时能够使用更具体的类。我可以以某种方式禁止这样做吗?当然,我可以使ParentClass
抽象,但是那样我就不能拥有ParentClass
类型的对象,有时候我确实需要它们。 最佳答案
确保这一点的唯一方法是将已定义的工厂传递给您的代码,该代码随后将创建ParentClass并不允许其他子类。
public ParentClass thing;
thing = ParentClassFactory.Build();
问题是将工厂推送到您的代码,但它可以让您控制此时设置的实例类型。