我为什么要用Java调用super()?

时间:2014-03-21 18:00:13

标签: java super

我在一本关于java的书中看到了一个例子:

public class A{
  public A(){
      System.out.println("A");
   }
}

public class B extends A{
    public B(){
       super();
       System.out.println("B");
   }

    public static void main(String[] args){
        B b = new B();
    }
}

我无法理解为什么super()会在这里?即使我删除super(),我也会得到相同的结果(A会被打印,然后是B)。据我所知,当我初始化子类时,父类在它之前初始化。那么为什么要使用super()

5 个答案:

答案 0 :(得分:13)

在这种特殊情况下,您不需要调用super();,因为如果您没有明确地调用它,Java会在构造函数中隐式插入对super();的调用。 (Java Tutorial link)

只有在其他情况下才需要调用超类中的另一个非默认构造函数,例如:

public class A{
  public A(String s){
      System.out.println("A");
   }
}

public class B extends A{
    public B(String s){
       super(s);
       System.out.println("B");
   }
}

答案 1 :(得分:2)

super();是多余的,不需要的。但是,有时您希望或必须调用特定的超类构造函数。在这些情况下,您需要使用适当的参数:super( params );

答案 2 :(得分:1)

Java隐式调用无参数超级构造函数。但是可能会发生超类构造函数有参数或者有多个超类构造函数。在这种情况下,你必须明确提到你想要调用的超类构造函数(编译器将其留给你)

答案 3 :(得分:1)

在任何构造函数中发生的第一件事是对this()或super()的调用;放入空的super()没有什么害处,但如果你不编译就会生成它。
只有当超类的构造函数接受参数时,才需要显式调用。

class Parent{
Parent(String s1){

}
}

class Child extends Parent{
Child(String s1,String s2){
super(s1);
this.s2=s2;
}
}

答案 4 :(得分:0)

超级由java自动调用。除非你重载构造函数。我认为这可能是正确的,但是没有任何线索。