类“ B”扩展“ A”并掩盖其某些功能是否有意义?例如,通过将以下代码放在我们要在A中屏蔽的函数的顶部:
if subclass type is B
don't execute the function
else
execute the function
这是否与软件设计中继承的一般思想相矛盾?
最佳答案
正如@rilent在技术上提到的那样,有可能您只是用空的实现覆盖了基本方法。但这是IMO的不良设计。我相信,即使@rilent也同意这一点。
如果不应该让child支持某种特定的行为(例如say方法),则可以/不应该使用parent / super / base类(无论如何)来抽象这种行为。这种抽象将始终导致子类中的方法为空,或者最多它们将引发未实现的异常(这甚至更糟)。
请参见下面的示例,您将了解我要解释的内容。
Bird {
Mate();
Fly();
Swim();
}
Eagle : Bird {
Mate() { /* :) */ }
Fly() { /* Oh come on, of course I can. */ }
Swim() { /* Oops, sorry I can't. */ }
}
Penguin : Bird {
Mate() { /* :) */ }
Fly() { /* Sorry I'm a flightless bird. */ }
Swim() { /* Yeah, I can do this well. */ }
}
现在您明白了为什么我说这是一个糟糕的设计。只是没有意义,对吗?所以,我们能做些什么?
介面
您可以使用接口而不是继承来抽象特定行为。我会重新考虑以上的课程,并有这种东西。
Fly()
和Swim()
分别由ICanFly
和ICanSwim
定义。Bird {
Mate();
}
Eagle : Bird, ICanFly {
Mate() { }
Fly() { }
}
Penguin : Bird, ICanSwim {
Mate() { }
Swim() { }
}
8 birds that can't fly。
关于java - 扩展时掩盖父类(super class)功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43748319/