你能在java中用同一个超类方法覆盖多个方法吗?



如果我想有不同的参数和不同的填充方法的孩子,什么是最好的方式能够做到以下,记住,我将有多个不同的方法的孩子。我会有,比如说,8个子,每个都有不同的方法和参数。

下面的代码只是我现在写的一个例子。我知道可能有错误…我写得很快:

class SuperClass{
    void fill(){
        //generic 
    }
    get(){//generic }
}
class child{
     variables a, b, c;
     @override
     void fill(a, b, c)
     @override
     int get_a(){
           return a;
     }
     @override
     int get_b(){
          return b;
     }
     //etc...
}
主。

main(){
 int a = 0, b = 0, c = 1;
 Superclass s = new child.fill(a,b,c);
 int i = s.get_a(); 
}

我猜重写可能不会工作,因为方法是不同的,但我怎么能做到这一点?

编辑:

我意识到代码有问题。扩展),但我在45秒内写完了…我正在寻找一种方法来继承多个孩子持有不同的变量,需要不同的setter/getter

不行,不行

在重写方法时不能更改方法签名(除了缩小返回类型和异常)。

你当然可以多次重载这个方法(并覆盖它们),但是超类需要知道所有的组合。

另一种方法是使用单个bean作为参数,并使其成为泛型类型。然后,每个子类都可以定义适当的对象类型。但是我们需要了解更多的具体情况,才能提出一个好的解决方案。

首先,您必须考虑谁在调用该代码。如果他们需要提出完全不同的参数来调用一个方法,似乎在调用者和被调用者之间已经存在强耦合,因此不清楚公共超类接口在这里可以提供什么抽象。

它不能@override,因为方法签名是不同的(一个接受参数,另一个不接受)。

第二,语法错误,你不能这样做:
void fill(a, b, c)

你可能想要声明abstract方法或者做:

void fill(a, b, c){}

下面一行的语法也是错误的:

new child.fill(a,b,c);

把它分成两行:

Superclass s = new child();
s.fill(a,b,c);

此外,get_a()get_b()在父类中不存在。

最后,为了使用继承类child(您可能希望根据Java代码惯例将其大写:Child),应该使用extend SuperClass .

有很多语法错误,但总的来说,我认为你在尝试做这样的事情:

abstract class SuperClass{
    abstract void fill(int a, int b, int c);
    abstract int get();
}
class child extends SuperClass{
    int a, b, c;
    @Override
    void fill(int a, int b, int c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }
    int get(){
        return a;
    }
    int get_a(){
        return a;
    }
    int get_b(){
        return b;
    }
    //etc...
}

最新更新