在构造函数中调用super()

时间:2014-03-13 09:34:01

标签: java constructor

我刚刚使用Eclipse'生成构造函数使用字段'功能,它为我提供了以下构造:

public Credentials(String userName, String password) {
    super();
    this.userName = userName;
    this.password = password;
}

Credentials类没有明确地扩展另一个类,所以它扩展Object我想。 什么是super();电话适合?

4 个答案:

答案 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构造函数并且您不会调用其他构造函数,则代码将无法编译