gpt4 book ai didi

java - 在扩展父类(super class)功能的同时屏蔽它

转载 作者:行者123 更新时间:2023-12-02 02:51:38 25 4
gpt4 key购买 nike

类“B”扩展“A”并掩盖其某些功能是否有意义?例如,将以下代码放在我们要在 A 中屏蔽的函数的顶部:

if subclass type is B
don't execute the function
else
execute the function

这是否与软件设计中继承的一般思想相矛盾?

最佳答案

正如 @rilent 在技术上提到的,您可能只是用空实现覆盖基本方法。但在我看来,这是一个糟糕的设计。我相信连 @rilent 也同意这一点。

如果子类不应该支持特定的行为(比如方法),那么这种行为可以/不应该使用父类/ super /基类(无论如何)进行抽象。这样的抽象总是会导致子类中出现空方法,或者最多会抛出未实现的异常(这更糟糕)。

请参阅下面的示例,您就会明白我想要解释的内容。

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. */ }
}

现在你明白为什么我说这是一个糟糕的设计了。只是没有意义,对吧?那么我们能做什么呢?

接口(interface)

您可以使用接口(interface)而不是继承来抽象特定行为。我会重新考虑上面的类(class)并有类似的东西。 Fly()Swim() 分别由 ICanFlyICanSwim 定义。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com