在java中用更多参数重写方法?
我有一个基类,其方法名为在java中用更多参数重写方法?,java,oop,overriding,overloading,Java,Oop,Overriding,Overloading,我有一个基类,其方法名为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)pa
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];
....
}
}
这仍然很难看,因为我必须对参数进行强制转换。对于这种情况,还有其他选项吗?您可以在b中添加一个
execute(inta,intb)
,但它不会覆盖execute(inta)
方法,它会使其过载。这两个方法都可以在B
的实例上调用,这将打破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}
}
是否需要为
execute()
指定固定数量的参数?请参阅Vitalii Fedorenko的文章,其中列出了所有可能的选项。@Atri:我不需要固定数量的参数,我想按基类调用。例如:A A=MyFactory.getInstance(…),A.execute(…)是的,如果我使用B的实例是可以的,但在我的例子中,我使用基类(A)的实例。但是当B需要比A更多的参数时,如何注入参数?A和B会有自己的构造函数,正好有他们需要的参数。是的,但在我的例子中,我使用一个工厂来创建基类a的实例。你能发布更多的代码吗,我不确定我是否在遵循?