如果我想有不同的参数和不同的填充方法的孩子,什么是最好的方式能够做到以下,记住,我将有多个不同的方法的孩子。我会有,比如说,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...
}