在java中覆盖包含更多参数的方法?

时间:2016-01-21 04:09:25

标签: java oop override 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)parameters[1];
        ....
    }
}

这仍然是丑陋的,因为我必须施放参数。这种情况还有其他选择吗?

2 个答案:

答案 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}

}