将子类对象分配给Superclass实例类型仅是为了覆盖概念?还是我们还要这样做?

将子类对象分配给Superclass实例类型仅是为了覆盖概念?还是我们还要这样做?,第1张

将子类对象分配给Superclass实例类型仅是为了覆盖概念?还是我们还要这样做?

当某人这样编写代码时,他/她正在尝试遵循基本的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();}

并且可能还会链接/冒泡到其他几个地方。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5586873.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存