
当你想初始化参数并将其中一个赋值给父类的变量时,构造函数中的super(variable-name);和super.variableName = something;有什么不同?
例如,我想实现"Zahnradfraese“的构造函数,它接受参数"int Kennung”,这个参数应该被赋值给父类"Produktionmittel“的属性"kennung”。
当我想从这个父类中调用一个变量时,我应该总是使用super吗?或者,如果我在子类中有另一个同名的变量,我应该只使用它?
发布于 2018-09-17 00:45:42
super(variable_name)表示构造函数调用,应该是构造函数的第一行。而super.variableName = something;意味着您使用super从子类中为父类的实例变量赋值,该值用于引用父类对象。
现在以您的例子为例:根据给定的类图,类Zahnradfraese有一个接受int Kennung参数的构造函数。此外,kennung是父类,没有构造函数,而是具有方法setKennung()。因此,您可以从Zahnradfraese类的构造函数内部执行super.setKennung(kennung)。您也可以在kennung中声明一个构造函数,但这意味着与类图不同,类图只有setter和getter方法,没有构造函数。
public class Zahnradfraese extends Kennung{
public Zahnradfraese(int kennung){
super.setKennung(kennung);
}
}发布于 2018-09-17 00:28:24
因此,super(variableName)调用您的父类一个参数构造函数,然后执行该逻辑
super.variableName = something;正在将something值赋给父类变量variableName
发布于 2018-09-17 00:28:54
super()是一个关键字,用于调用父类中的构造函数,它必须从子类的构造函数内部调用。另外,它必须是第一个语句。
其中,as super.s用于设置子类中的变量s (在父类中声明),并且没有上述限制。
如下例所示:
class Test {
int s;
Test(int d) {
}
}
class T extends Test {
T() {
super(8);
int d = 99;
super.s = 00;
}
void ss() {
super.s = 99;
}
}https://stackoverflow.com/questions/52356075
复制相似问题