调用超级方法时,我指的是什么?
When invoking the super method, what is i referring to?
我正在尝试学习 super
的概念。有人可以告诉我 super(i)
中的 i
指的是什么吗?
是NaturalNumber
class中的私有int
变量i
吗? NaturalNumber?
里面的参数是指别的东西吗?我对语法很困惑。
class NaturalNumber {
private int i;
public NaturalNumber(int i) { this.i = i; }
// ...
}
class EvenNumber extends NaturalNumber {
public EvenNumber(int i) { super(i); }
// ...
}
在你的例子中,它是 EvenNumber 的构造函数参数。调用 super(i)
将构造函数参数传递给超类构造函数(按值,因为它是原始类型)。然后超类构造函数将该值存储在私有字段中。
当你调用super(i)
时,它会调用superclass的构造函数。
super
关键字指的是superclass(父class)。在这种情况下,您的 EvenNumber 的 superclass 是 NaturalNumber,因为 Even number extends NaturalNumber。所以基本上,说 super(i)
你就是说 NaturalNumber(i)
.
super(arguemnts)
是对传递 arguments
.
的超级class 构造函数的调用
在 class EvenNumber extends NaturalNumber
的情况下,它是确保您的 class 的 NaturalNumberness 的机制。
在这种情况下发生的情况是,您传递给 super
class 构造函数的值与您通过 public EvenNumber(int i)
传递给 EvenNumber
class 的值相同。因此它将初始化 private int i
字段(您无法从 EvenNumber
直接访问它,因为它是私有的)。
如果我们稍微重命名变量,也许您会更好地看到它:
class NaturalNumber {
private int value;
public NaturalNumber(int naturalValue) {
this.value = naturalValue;
}
// ...
}
class EvenNumber extends NaturalNumber {
public EvenNumber(int oddValue) {
super(oddValue);
}
// ...
}
因此,当您通过 new EvenNumber(2)
创建 EvenNumber
的实例时, EvenNumber(int oddValue)
构造函数中发生的第一件事是 super(2)
,它将调用 NaturalNumber(int naturalValue)
构造函数并通过2
到它,最终将 int value
设置为 2
。
class NaturalNumber {
private int i;
public NaturalNumber(int x) { this.i = x; }
// ...
}
class EvenNumber extends NaturalNumber {
public EvenNumber(int y) { super(y); }
// ...
}
考虑上面的代码。此代码与您的代码执行完全相同的操作。我更改了变量名以使其清楚。所以,当你调用 super(y) 时,它所做的就是调用它的父 class 的构造函数,即 NaturalNumber(i),y 的值被传递给这个构造函数,在这个构造函数中你是将变量 i 的值设置为传递给构造函数的值。
所以当我们调用 super(int) 时,它所做的是将一个整数值传递给父 class 的构造函数。
此外,要设置父级 class 的一些变量,我们可以执行 super.i=10
,这会将父级 class 中的变量 'i' 设置为 10。
super()
应该使用与 super-class 的构造函数相同的参数调用,因为它做的事情完全相同。例如:
class Person {
private name;
public Person(String name) {
this.name = name;
}
public Person() { /* Empty constructors initialize with default values,
i.e in this case name is initialized with null*/
}
}
class Employee extends Person {
private double salary;
public Employee(double salary) {
super("Michael");
this.salary = salary;
/* That means that the emplyee which is created is a person
who's name is "Michael"*/
}
public Employee(double salary) {
super();
this.salary = salary;
/* That means that the emplyee which is created is a person
who's name is null as the empty constructor initialized it*/
}
}
希望对您有所帮助。
super
表达式中的 i
排他地 引用 NaturalNumber
中的局部变量 i
class。它不会进一步扩大其范围。
我正在尝试学习 super
的概念。有人可以告诉我 super(i)
中的 i
指的是什么吗?
是NaturalNumber
class中的私有int
变量i
吗? NaturalNumber?
里面的参数是指别的东西吗?我对语法很困惑。
class NaturalNumber {
private int i;
public NaturalNumber(int i) { this.i = i; }
// ...
}
class EvenNumber extends NaturalNumber {
public EvenNumber(int i) { super(i); }
// ...
}
在你的例子中,它是 EvenNumber 的构造函数参数。调用 super(i)
将构造函数参数传递给超类构造函数(按值,因为它是原始类型)。然后超类构造函数将该值存储在私有字段中。
当你调用super(i)
时,它会调用superclass的构造函数。
super
关键字指的是superclass(父class)。在这种情况下,您的 EvenNumber 的 superclass 是 NaturalNumber,因为 Even number extends NaturalNumber。所以基本上,说 super(i)
你就是说 NaturalNumber(i)
.
super(arguemnts)
是对传递 arguments
.
的超级class 构造函数的调用
在 class EvenNumber extends NaturalNumber
的情况下,它是确保您的 class 的 NaturalNumberness 的机制。
在这种情况下发生的情况是,您传递给 super
class 构造函数的值与您通过 public EvenNumber(int i)
传递给 EvenNumber
class 的值相同。因此它将初始化 private int i
字段(您无法从 EvenNumber
直接访问它,因为它是私有的)。
如果我们稍微重命名变量,也许您会更好地看到它:
class NaturalNumber {
private int value;
public NaturalNumber(int naturalValue) {
this.value = naturalValue;
}
// ...
}
class EvenNumber extends NaturalNumber {
public EvenNumber(int oddValue) {
super(oddValue);
}
// ...
}
因此,当您通过 new EvenNumber(2)
创建 EvenNumber
的实例时, EvenNumber(int oddValue)
构造函数中发生的第一件事是 super(2)
,它将调用 NaturalNumber(int naturalValue)
构造函数并通过2
到它,最终将 int value
设置为 2
。
class NaturalNumber {
private int i;
public NaturalNumber(int x) { this.i = x; }
// ...
}
class EvenNumber extends NaturalNumber {
public EvenNumber(int y) { super(y); }
// ...
}
考虑上面的代码。此代码与您的代码执行完全相同的操作。我更改了变量名以使其清楚。所以,当你调用 super(y) 时,它所做的就是调用它的父 class 的构造函数,即 NaturalNumber(i),y 的值被传递给这个构造函数,在这个构造函数中你是将变量 i 的值设置为传递给构造函数的值。
所以当我们调用 super(int) 时,它所做的是将一个整数值传递给父 class 的构造函数。
此外,要设置父级 class 的一些变量,我们可以执行 super.i=10
,这会将父级 class 中的变量 'i' 设置为 10。
super()
应该使用与 super-class 的构造函数相同的参数调用,因为它做的事情完全相同。例如:
class Person {
private name;
public Person(String name) {
this.name = name;
}
public Person() { /* Empty constructors initialize with default values,
i.e in this case name is initialized with null*/
}
}
class Employee extends Person {
private double salary;
public Employee(double salary) {
super("Michael");
this.salary = salary;
/* That means that the emplyee which is created is a person
who's name is "Michael"*/
}
public Employee(double salary) {
super();
this.salary = salary;
/* That means that the emplyee which is created is a person
who's name is null as the empty constructor initialized it*/
}
}
希望对您有所帮助。
super
表达式中的 i
排他地 引用 NaturalNumber
中的局部变量 i
class。它不会进一步扩大其范围。