将子类对象分配给Superclass实例类型仅用于覆盖概念?或者我们也在为其他东西执行此操作?

Ros*_*ose 4 java oop

是否仅为覆盖将子类对象分配给超类实例类型?或者我们是否也为此做其他事情?

示例:Sub是Super和的子类型 Super s = new Sub();

请解释.

MD *_*med 7

当有人写这样的代码时,他/她正试图遵循基本的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)

它也可能链接/冒泡到其他几个地方.