Java 在构造函数中调用super()

Java 在构造函数中调用super(),java,constructor,Java,Constructor,我刚刚使用了Eclipse的“使用字段生成构造函数”函数,它为我提供了以下构造函数: public Credentials(String userName, String password) { super(); this.userName = userName; this.password = password; } 凭证类没有显式扩展另一个类,因此它扩展了对象。 什么是super()callgood for?super()不带参数调用父构造函数 要将if用于参数,例

我刚刚使用了Eclipse的“使用字段生成构造函数”函数,它为我提供了以下构造函数:

public Credentials(String userName, String password) {
    super();
    this.userName = userName;
    this.password = password;
}
凭证
类没有显式扩展另一个类,因此它扩展了
对象
。 什么是
super()
callgood for?

super()不带参数调用父构造函数

要将if用于参数,例如super(您的参数),它将调用接受参数类型的一个参数(if extists)的构造函数


它还可以用于从父级调用方法。即super.yourMethod()

如果将构造函数定义为:

public Credentials(String userName, String password) {
    this.userName = userName;
    this.password = password;
}
然后编译器将向超类构造函数添加一个隐式调用,因此这不会对编译后的代码造成任何差异

Credentials类没有显式扩展另一个类,所以我猜它扩展了对象。什么是超级();打电话给好吗


但是您的类隐式扩展了
对象
,因此将调用
对象()

super关键字是对当前超类的“封闭”实例的引用

您可以使用它访问超类的方法或字段(如果它们可见)。如果您的类没有超类(由
类凭据扩展了超类名称
指定),则该超类将自动成为
对象

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);
  }
}
super()
调用父类构造函数,如果不添加此行,默认情况下将调用非参数构造函数


如果父类没有非参数构造函数,并且您不会调用其他构造函数,那么您的代码将不会编译

它的可能副本将不会产生任何影响,因为对象类不会在默认构造函数中初始化任何内容super()是super关键字的一种特殊用法,您可以在其中调用无参数父构造函数。通常,super关键字可用于调用重写的方法、访问隐藏字段或调用超类的构造函数。在这种情况下,它将不起任何作用。仅供参考,每个类都隐式地从
对象扩展而来。任何有助于改进答案的附加信息都将受到重视。你对语义绝对性的坚持让我很恼火。我会的@Keppil。是的,我想笑话结束了。我选择了一个更微妙的选择@Keppil