你可以用java中的相同超类方法覆盖多个方法吗?

时间:2014-07-09 01:10:47

标签: java

如果我想让孩子拥有不同的参数和不同的填充方法,那么能够做到以下几点的最佳方法是什么,请记住,我将拥有比这一个孩子更多的不同方法..我&#39比如,有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 / getters的子代

2 个答案:

答案 0 :(得分:1)

不,这不起作用。

覆盖方法时不能更改方法签名(缩小返回类型和异常除外)。

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

另一种方法是将一个bean作为参数,并使其成为泛型类型。然后,每个子类都可以定义适当的对象类型。但我们需要在这里了解更多有关具体案例的建议,以提出一个好的解决方案。

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

答案 1 :(得分:0)

它不能@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代码约定将其大写:Childextend 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...
}