将子类对象分配给Superclass实例类型仅是为了覆盖概念?还是我们还要这样做?
问题内容:
您是否仅将子类对象分配给超类实例类型?还是我们还要这样做?
示例:Sub是Super的子类型, Super s = new Sub();
请解释。
问题答案:
当某人这样编写代码时,他/她正在尝试遵循基本的OO设计原则,即-
编写接口程序,而不是具体实现
我已经在我的一篇博客文章中解释了这一原理。在该Class Inheritance VS Interface Inheritance
部分中查找。
总而言之,当您使用父类型的引用来引用子类型的实例时,您将获得很大的灵活性。例如,如果将来需要更改子类型的实现,则无需更改太多代码即可轻松实现。
考虑以下方法-
public void DoSomeStuff(Super s) {
s.someMethod();
}
并调用此方法-
DoSomeStuff(new Sub());
现在,如果您需要更改内部逻辑someMethod
,则可以通过声明的新子类型(Super
例如NewSubType
)并更改该实现内部的逻辑来轻松实现。这样,您将无需接触使用该方法的其他现有代码。您仍然可以DoSomeStuff
通过以下方式使用您的方法-
DoSomeStuff(new NewSubType());
如果您声明的参数为DoSomeStuff
of Sub
,那么您也必须更改其实现-
DoSomeStuff(NewSubType s) {
s.someMethod();
}
并且可能还会链接/冒泡到其他几个地方。