Java的。扩展Object的类中的超级调用

时间:2016-12-11 10:25:37

标签: java super

我经常看到这样的代码:

class MyClass{
      private int a;
      public MyClass(int a){
           super();        //what purpose of this?
           this.a = a;
      }
      //other class methods here
}

如果类扩展了object,那么super()调用会调用Object构造函数,正如我所知,它不执行任何操作。那为什么需要调用super()?我对那个特殊情况很感兴趣,因为super()什么都不做,因为它引用了Object()。

1 个答案:

答案 0 :(得分:0)

首先,我建议阅读来源 - documentation. 然后引用jb-nizet' answer

  

请注意,此显式调用是不必要的,因为编译器会为您添加它。当您想要使用参数调用超类构造函数时,只需要在构造函数中添加一个super()调用。

在Java中,super指的是父类。我们可以通过两种方式使用它:

super()正在调用父类的构造函数。 super.toString()将致电父类'实施toString方法。

在你的例子中:

class MyClass{
      private int a;
      public MyClass(int a){
           super();        //what purpose of this?
           this.a = a;
      }
      //other class methods here
}

它调用Object的构造函数是空白的,所以它只是迂腐,但如果我们修改它:

class Foo extends Bar{
      private int a;
      public Foo(int a){
           super();        //what purpose of this?
           this.a = a;
      }
      //other class methods here
}

它代表首先调用Bar的构造函数。

我之前描述的另一种用法是:

class Bar {
    public String toString() {
        return "bar";
    }
}

class Foo extends Bar{
      String foo = "foo";
      public Foo(){
           super();        //what purpose of this?
      }
      public String toString() {
          super.toString()
}

将导致返回" bar"。