当你想要初始化参数并且你想将其中一个分配给父类的变量时,构造函数中super(variable-name);
和super.variableName = something;
之间有什么区别?
例如,我想实现“Zahnradfraese”的构造函数,它采用参数“int Kennung”,并且此参数应分配给父类“Produktionmittel”的属性“kennung”
当我想从这个父类中调用变量时,我是否应该总是使用super?如果我在子类中有另一个具有相同名称的变量,我是否只使用它?
super(variable_name)
表示构造函数调用,应该是构造函数中的第一行。而super.variableName = something;
表示您使用super
从子类为父类的实例变量赋值,该Zahnradfraese
用于引用父类对象。
现在在你的情况下:根据给定的类图,类int Kennung
有一个构造函数,它接受kennung
参数。此外,setKennung()
是父类,没有构造函数,而是有方法super.setKennung(kennung)
。所以你可以从Zahnradfraese
类的构造函数中做kennung
。你也可以在public class Zahnradfraese extends Kennung{
public Zahnradfraese(int kennung){
super.setKennung(kennung);
}
}
中声明一个构造函数,但这意味着偏离了具有setter和getter方法而没有构造函数的类图。
super(variableName);
super.variableName = something;
和method()
有什么区别?
super(variableName)
(这里,super.variableName = something;
)是一个方法调用(这里是父的构造函数调用)。
super
是父母领域的任务。
当我想从这个父类调用变量时,我是否应该总是使用
super(variableName)
?如果我在子类中有另一个具有相同名称的变量,我是否只使用它?
super.variableName
可以初始化父母的内心状态,特别是super.variableName
。在访问之前初始化Zahnradfraese
是合理的。您列出的两种方式都可以用于此目的。只需确保没有代码重复。
我想实现
int Kennung
的构造函数,它接受参数kennung
,并且此参数应该分配给父类Produktionmittel
的属性Produktionmittel
。
添加一个构造函数到int
,它需要一个public Produktionmittel(int i) {
kennung = i;
}
public Zahnradfraese(int kennung) {
super(kennung);
}
并从孩子那里打电话:
super(variableName)
所以super.variableName = something;
正在调用你的父类一个arg构造函数,并且该逻辑被执行
something
将variableName
值赋给父类变量super()
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;
}
}
(在父类中声明),并且它没有上述限制。
见下面的例子:
public class P{
protected String variable1;
private boolean variableInitialized = false;
public P (String s){
this.variable1 = s;
this.variableInitialized=true;
}
}
public class C extends P{
}
super(arg)调用超类的构造函数,设置变量只是设置变量。 (构造函数可能包含更多逻辑,而不仅仅是分配变量,您可以使用第二种方式绕过该变量)
简单的例子:
super("x")
在C
中调用super.variable1="x"
也会设置布尔标志,因为父类“可能会期望”它。调用qazxswpoi不会影响布尔标志,也不能更改它,因为它是私有的。
作为拇指的规则,我会说:如果某个变量有专用的构造函数,那么它似乎值得使用它,除非您确实想要覆盖该实现。