super(variableName) 之间的区别;和 super.variableName
Difference between super(variableName) ; and super.variableName
构造函数中 super(variable-name);
和 super.variableName = something;
之间的区别是什么,当您想初始化参数并且想将其中一个参数分配给父变量时class?
例如我想实现 "Zahnradfraese" 的构造函数,它接受参数 "int Kennung" 并且这个参数应该分配给父 [=24] 的属性 "kennung" =] "Produktionmittel"
当我想从这个父 class 调用一个变量时,我应该总是使用 super 还是如果我在子 class 中有另一个同名变量,我就使用它?
What is the difference between super(variableName);
and super.variableName = something;
?
method()
(这里是super(variableName)
)是方法调用(这里是parent的构造函数调用)。
super.variableName = something;
是对 parent 字段的分配。
Should I always use super
when I wanna call a variable from this parent class or I just use it if I have another variable with the same name in the child class?
super(variableName)
可以初始化 parent 的内部状态,特别是 super.variableName
。在访问它之前初始化一个 super.variableName
是合理的。您列出的两种方式都可以用于此目的。只要确保没有代码重复即可。
I want to implement the constructor of the Zahnradfraese
and it takes the parameter int Kennung
and this parameter should be assigned to the attribute kennung
of the parent class Produktionmittel
.
向 Produktionmittel
添加构造函数,它接受 int
public Produktionmittel(int i) {
kennung = i;
}
并从 child:
调用它
public Zahnradfraese(int kennung) {
super(kennung);
}
因此 super(variableName)
正在调用您的父 class 一个 arg 构造函数,并且该逻辑得到执行
super.variableName = something;
正在将 something
值分配给父 class 变量 variableName
super()
是一个关键字,用于在父 class 中调用构造函数,并且必须从子 class 的构造函数中调用它。也必须是第一个语句。
其中 super.s
用于从子 class 设置变量 s
(在父 class 中声明)并且它没有限制同上。
见下例:
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;
}
}
super(arg)调用superclass的构造函数,设置变量只是设置变量。 (构造函数可能包含比分配变量更多的逻辑,您可以用第二种方式绕过)
简单示例:
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{
}
在 C
中调用 super("x")
也会设置布尔标志,作为父级 class "might expect" 它。调用 super.variable1="x"
不会影响布尔标志,并且您无法更改它,因为它是私有的。
根据经验,我会说:如果某个变量有专用的构造函数,似乎值得使用它,除非您确实想覆盖该实现。
super(variable_name)
表示构造函数调用,应该在构造函数的第一行。而 super.variableName = something;
意味着您正在使用 super
从子 class 为父 class 的实例变量赋值,该值用于引用父 class 对象.
现在你的情况:根据给定的 class-图表
class Zahnradfraese
有一个带有 int Kennung
参数的构造函数。此外,kennung
是父级 -class 并且没有构造函数,而是具有方法 setKennung()
。所以你可以在 Zahnradfraese
class 的构造函数中执行 super.setKennung(kennung)
。您也可以在 kennung
中声明一个构造函数,但这意味着偏离 class-diagram,它有 setter 和 getter 方法但没有构造函数。
public class Zahnradfraese extends Kennung{
public Zahnradfraese(int kennung){
super.setKennung(kennung);
}
}
super(variable-name);
和 super.variableName = something;
之间的区别是什么,当您想初始化参数并且想将其中一个参数分配给父变量时class?
例如我想实现 "Zahnradfraese" 的构造函数,它接受参数 "int Kennung" 并且这个参数应该分配给父 [=24] 的属性 "kennung" =] "Produktionmittel"
当我想从这个父 class 调用一个变量时,我应该总是使用 super 还是如果我在子 class 中有另一个同名变量,我就使用它?
What is the difference between
super(variableName);
andsuper.variableName = something;
?
method()
(这里是super(variableName)
)是方法调用(这里是parent的构造函数调用)。
super.variableName = something;
是对 parent 字段的分配。
Should I always use
super
when I wanna call a variable from this parent class or I just use it if I have another variable with the same name in the child class?
super(variableName)
可以初始化 parent 的内部状态,特别是 super.variableName
。在访问它之前初始化一个 super.variableName
是合理的。您列出的两种方式都可以用于此目的。只要确保没有代码重复即可。
I want to implement the constructor of the
Zahnradfraese
and it takes the parameterint Kennung
and this parameter should be assigned to the attributekennung
of the parent classProduktionmittel
.
向 Produktionmittel
添加构造函数,它接受 int
public Produktionmittel(int i) {
kennung = i;
}
并从 child:
调用它public Zahnradfraese(int kennung) {
super(kennung);
}
因此 super(variableName)
正在调用您的父 class 一个 arg 构造函数,并且该逻辑得到执行
super.variableName = something;
正在将 something
值分配给父 class 变量 variableName
super()
是一个关键字,用于在父 class 中调用构造函数,并且必须从子 class 的构造函数中调用它。也必须是第一个语句。
其中 super.s
用于从子 class 设置变量 s
(在父 class 中声明)并且它没有限制同上。
见下例:
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;
}
}
super(arg)调用superclass的构造函数,设置变量只是设置变量。 (构造函数可能包含比分配变量更多的逻辑,您可以用第二种方式绕过)
简单示例:
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{
}
在 C
中调用 super("x")
也会设置布尔标志,作为父级 class "might expect" 它。调用 super.variable1="x"
不会影响布尔标志,并且您无法更改它,因为它是私有的。
根据经验,我会说:如果某个变量有专用的构造函数,似乎值得使用它,除非您确实想覆盖该实现。
super(variable_name)
表示构造函数调用,应该在构造函数的第一行。而 super.variableName = something;
意味着您正在使用 super
从子 class 为父 class 的实例变量赋值,该值用于引用父 class 对象.
现在你的情况:根据给定的 class-图表
class Zahnradfraese
有一个带有 int Kennung
参数的构造函数。此外,kennung
是父级 -class 并且没有构造函数,而是具有方法 setKennung()
。所以你可以在 Zahnradfraese
class 的构造函数中执行 super.setKennung(kennung)
。您也可以在 kennung
中声明一个构造函数,但这意味着偏离 class-diagram,它有 setter 和 getter 方法但没有构造函数。
public class Zahnradfraese extends Kennung{
public Zahnradfraese(int kennung){
super.setKennung(kennung);
}
}