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