[英]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.