我经常看到这样的代码:
class MyClass{
private int a;
public MyClass(int a){
super(); //what purpose of this?
this.a = a;
}
//other class methods here
}
如果类扩展了object,那么super()调用会调用Object构造函数,正如我所知,它不执行任何操作。那为什么需要调用super()?我对那个特殊情况很感兴趣,因为super()什么都不做,因为它引用了Object()。
答案 0 :(得分:0)
首先,我建议阅读来源 - documentation. 然后引用jb-nizet' answer:
请注意,此显式调用是不必要的,因为编译器会为您添加它。当您想要使用参数调用超类构造函数时,只需要在构造函数中添加一个super()调用。
在Java中,super
指的是父类。我们可以通过两种方式使用它:
super()
正在调用父类的构造函数。 super.toString()
将致电父类'实施toString
方法。
在你的例子中:
class MyClass{
private int a;
public MyClass(int a){
super(); //what purpose of this?
this.a = a;
}
//other class methods here
}
它调用Object
的构造函数是空白的,所以它只是迂腐,但如果我们修改它:
class Foo extends Bar{
private int a;
public Foo(int a){
super(); //what purpose of this?
this.a = a;
}
//other class methods here
}
它代表首先调用Bar
的构造函数。
我之前描述的另一种用法是:
class Bar {
public String toString() {
return "bar";
}
}
class Foo extends Bar{
String foo = "foo";
public Foo(){
super(); //what purpose of this?
}
public String toString() {
super.toString()
}
将导致返回" bar"。