java中的超级构造函数

时间:2011-01-13 09:53:08

标签: java class constructor super superclass

请解释

public class Contact {
    private String contactId;
   private String firstName;
    private String lastName;
    private String email;
    private String phoneNumber;

public Contact(String contactId,String firstName, String lastName,   String email,        String phoneNumber) {
    super();  //what does standalone super() define? With no args here?
    this.firstName = firstName;  
    this.lastName = lastName;     //when is this used?, when more than one args to be entered?
    this.email = email;
    this.phoneNumber = phoneNumber;
}

内部没有参数的Super()意味着要定义多个参数?这是在“this.xxx”的帮助下完成的吗?

为什么我们在“公共类联系”本身中定义。为什么我们再次定义并在此处调用其参数?

2 个答案:

答案 0 :(得分:7)

  

内部没有参数的Super()意味着要定义多个参数?

不,super()只调用基类的no-arg构造函数,在您的情况下为Object

它什么也没做。它只是在代码中明确表示您正在使用no-arg构造函数构造基类。实际上,如果你离开super(),它将被编译器隐式添加回来。

那么super()是什么,如果它隐含地添加呢?好吧,在某些情况下,类没有no-arg构造函数。此类的子类必须显式调用某些超级构造函数,例如使用super("hello")

  

<强> this.lastName = lastName; //when is this used?, when more than one args to be entered?

this.lastName = lastName;super()无关。它只是声明构造函数参数lastName的值应该分配给成员变量lastName。这相当于

public Contact(String contactId, String firstName, String lastNameArg,
               String email, String phoneNumber) {
    // ...
    lastName = lastNameArg;
    // ...

答案 1 :(得分:6)

super()调用超类的默认(no-arg)构造函数。这是因为为了构造一个对象,你必须遍历层次结构中的所有构造函数。

super()可以省略 - 编译器会自动将其插入。

在您的情况下,超类是Object