是否仅为覆盖将子类对象分配给超类实例类型?或者我们是否也为此做其他事情?
示例:Sub是Super和的子类型
Super s = new Sub();
请解释.
当有人写这样的代码时,他/她正试图遵循基本的OO设计原则,该原则说 -
编程到接口,而不是具体实现
我在我的一篇博文中解释了这个原则.看看这一Class Inheritance VS Interface Inheritance节.
总结一下这篇文章,当您使用父类型的引用来引用子类型的实例时,您将获得很大的灵活性.例如,如果您将来需要更改子类型实现,则可以轻松地执行此操作,而无需更改大量代码.
考虑以下方法 -
public void DoSomeStuff(Super s) {
s.someMethod();
}
Run Code Online (Sandbox Code Playgroud)
并调用此方法 -
DoSomeStuff(new Sub());
Run Code Online (Sandbox Code Playgroud)
现在,如果您需要更改内部逻辑someMethod,您可以通过声明一个新的子类型Super,比如说NewSubType,并更改该实现中的逻辑来轻松实现.通过这种方式,您将永远不必触及使用该方法的其他现有代码.您仍然可以DoSomeStuff通过以下方式使用您的方法 -
DoSomeStuff(new NewSubType());
Run Code Online (Sandbox Code Playgroud)
假如你声明的参数DoSomeStuff是的Sub,你将不得不改变其实施过-
DoSomeStuff(NewSubType s) {
s.someMethod();
}
Run Code Online (Sandbox Code Playgroud)
它也可能链接/冒泡到其他几个地方.
| 归档时间: |
|
| 查看次数: |
10198 次 |
| 最近记录: |