为什么this.super()在Java中不可行?

ABC*_*123 1 java constructor this super

在下面的示例中,如果我创建一个名为example的类的构造函数,如下所示:

public class Example{

    public Example(){
        this.super();
    }

}
Run Code Online (Sandbox Code Playgroud)

上面的方法不起作用,因为会javac Example.java通知以下编译错误:

Example.java:3: error: illegal qualifier; Object is not an inner class
        this.super();
            ^
1 error
Run Code Online (Sandbox Code Playgroud)

但是,它不应该像this使用隐式声明那样工作,而不是通过使用super()显式声明this吗?

tem*_*def 7

尽管通过调用来调用超类构造函数super(args)看起来像是常规方法调用,但是该语法实际上与典型方法调用不同,并且不受相同规则的约束。例如:

  1. 您只能super(args)在构造函数中使用。
  2. 您只能super(args)用作构造函数的第一行。

从这种意义上讲,这可能有助于将其视为方法调用而不是方法调用,而只是告诉Java初始化超类要做什么。

因为这不是典型的方法调用,所以常规方法调用的规则不适用于它。结果,您不能给它加上前缀this.以使接收器对象明确。Java语言设计人员没有使该语法合法的根本原因没有;他们只是选择不这样做。