我有一个基类,其方法名为execute
:
class A {
public execute(int a){}
}
我还有一个B类,它扩展了A,但execute
方法需要更多参数:
目前,我的解决方案是使用可选参数:
class B extends A {
public execute(int a, Object... parameters){
long b = (long)parameters[0];
boolean c = (boolean)parameters[1];
....
}
}
这仍然是丑陋的,因为我必须施放参数。这种情况还有其他选择吗?
答案 0 :(得分:1)
您可以在B中添加execute(int a, int b)
,但它不会覆盖execute(int a)
方法,它会超载它。这两种方法都可以在B
。
答案 1 :(得分:1)
这将打破OO范式。固体中的L代表Liskov替代原则。
适用于您的原则示例是B应该表现为A。
更好的解决方案是通过构造函数注入这些参数,并且不带任何参数执行。
class A {
int a;
public A(int a){
this.a = a;
}
public execute(){ // do something with a}
}
class B {
int a;
long b;
boolean c;
public B (int a, long b, boolean c) {
this.a = a;
this.b = b;
this.c = c;
}
public execute(){ // do something with a, b and c}
}