繁体   English   中英

在构造函数中调用super()

[英]Calling super() in constructor

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

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

Credentials类没有显式扩展另一个类,因此我猜想它扩展了Object 什么是super(); 通话好吗?

如果要将构造函数定义为:

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

然后,无论如何编译器都会向超类构造函数添加隐式调用,因此这对编译后的代码没有任何影响

Credentials类没有显式扩展另一个类,因此我猜想它扩展了Object。 什么是super()? 通话好吗?

但是您的类隐式扩展了Object ,因此将对Object()进行调用。

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);
  }
}

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

要使用if作为参数,例如super(您的参数),它将调用接受参数类型(如果存在)的一个参数的构造函数。

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

super()调用父类的构造函数,如果您不添加此行,则默认情况下将调用非arg构造函数。

如果父类没有非args构造函数,并且您不会调用其他构造函数,则您的代码将无法编译

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM