【发布时间】:2023-03-07 09:52:01
【问题描述】:
如果父类中的方法不需要参数,但子类中的覆盖方法需要一个。在父类的方法中使用无用参数是一种好习惯吗?
//in parent class:
getFeature(String name){
return defaultFeature;
}
//in child class:
getFeature(String name){
return new Feature(name);
}
该方法在父类中的另一个方法中使用且仅使用。所以我们对父类和子类有相同的签名。真正的问题是两个子类的 getFeature 实现略有不同。
或者有没有更好的方法来实现这一点?
【问题讨论】:
-
如果你这样做,它就不再是覆盖,而是重载。
-
@LuiggiMendoza:不是真的,相对于问题的最后一句话。
-
这在我看来是抽象工厂模式,除了父类不是抽象的并且返回一些默认对象。反正不同签名的方法(名称+参数列表)是不同的方法,所以不能在父类中有
method getName(),在子类中有方法getName(String name),希望重写。它们没有相同的签名。 -
但是这个getFeature是用的,而且只用在父类的另一个方法中。这就是多态性发生的地方。
-
从您上次的评论来看,这似乎是一种可能的代码异味。你能进一步解释一下父类的设计吗?这个
name参数总是需要吗?
标签: java class inheritance overriding