我刚刚使用Eclipse'生成构造函数使用字段'功能,它为我提供了以下构造:
public Credentials(String userName, String password) {
super();
this.userName = userName;
this.password = password;
}
Credentials
类没有明确地扩展另一个类,所以它扩展Object
我想。
什么是super();
电话适合?
答案 0 :(得分:5)
如果要将构造函数定义为:
public Credentials(String userName, String password) {
this.userName = userName;
this.password = password;
}
然后编译器将添加对超类构造函数的隐式调用,因此这不会对编译代码产生 ANY 差异。
Credentials类没有显式扩展另一个类,所以它扩展了Object我猜。什么是super();打电话给谁?
但是,您的类会隐式扩展Object
,因此会调用Object()
。
答案 1 :(得分:1)
super
关键字是对当前超类的“封闭”实例的引用。
您可以使用它来访问超类的方法或字段(如果它们可见)。如果您的类没有超类(由class Credentials extends SuperclassName
指定),则超类自动为Object
。
super()
作为方法调用调用超类的构造函数(没有参数的构造函数)。你只能调用你自己的类的构造函数,而不是任何其他方法。
示例:
class A {
private String m_name;
public A(String name){
m_name = name;
}
}
class B extends A {
public B(String firstName, String lastName){
//this calls the constructor of A
super(firstName + " " + lastName);
}
}
答案 2 :(得分:0)
super()调用没有参数的父构造函数。
要使用if作为例如super(你的参数)的参数,它将调用接受参数类型的一个参数的构造函数(如果是extists)。
此外,它还可用于从父级调用方法。即super.yourMethod()
答案 3 :(得分:0)
super()
调用父类构造函数,如果你不想添加这一行,默认情况下会调用非arg构造函数。
如果父类没有非args构造函数并且您不会调用其他构造函数,则代码将无法编译