我们说我有几节课:
public class ParentClass
{
<common functionality>
...
}
public class ChildClass : ParentClass
{
<additional functionality>
...
}
在我的代码中,我使用ParentClass
和ChildClass
类型的对象 - 有时我不需要ChildClass
上的额外功能,有时候我也需要。{1}}。 (实际上还有几代课程涉及,但让我们保持简单。)有没有办法让它如此,如果我声明一个这样的对象:
public ParentClass thing;
我赢得以后能够将thing
定义为:
thing = new ChildClass();
我希望多态性达到ChildClass
继承ParentClass
所有功能的程度,但我不希望能够在定义时使用更具体的类宾语。我可以以某种方式禁止这种情况吗?当然,我可以使ParentClass
抽象,但后来我不能拥有ParentClass
类型的对象,我有时需要它们。
答案 0 :(得分:1)
确保将定义的工厂传递给代码的唯一方法是创建ParentClass,而不允许其他子类。
public ParentClass thing;
thing = ParentClassFactory.Build();
问题是将工厂推向你的代码,但它可以让你控制此时设置的实例类型。