是否将子类对象分配给父类(super class)实例类型只是为了覆盖?还是我们这样做也是为了其他目的?
例子:
Sub 是 Super 的子类型,并且
Super s = new Sub();
请解释。
最佳答案
当有人写这样的代码时,他/她试图遵循一个基本的 OO 设计原则,即 -
Program to an interface, not to a concrete implementation
我在one of my blog posts中解释过这个原理.查看类继承与接口(interface)继承
部分。
总而言之,当您使用父类型的引用来引用子类型的实例时,您会获得很大的灵 active 。例如,如果您将来需要更改您的子类型实现,您将能够轻松地做到这一点,而无需更改太多代码。
考虑以下方法 -
public void DoSomeStuff(Super s) {
s.someMethod();
}
并调用此方法 -
DoSomeStuff(new Sub());
现在,如果您需要更改 someMethod
中的逻辑,您可以通过声明 Super
的新子类型轻松实现,比如 NewSubType
,并更改该实现中的逻辑。这样,您将永远不必触及使用该方法的其他现有代码。您仍然可以通过以下方式使用 DoSomeStuff
方法 -
DoSomeStuff(new NewSubType());
如果您将 DoSomeStuff
的参数声明为 Sub
的参数,那么您也必须更改其实现 -
DoSomeStuff(NewSubType s) {
s.someMethod();
}
它也可能链接/冒泡到其他几个地方。
关于java - 将子类对象分配给 Superclass 实例类型只是为了重写概念?还是我们这样做也是为了其他事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16188122/