super() 只能从子 class 构造函数中调用吗? | Java

Can super() only be called from within the child class constructor? | Java

所以我理解super()调用父class的构造函数,我已经多次使用它。但是,我从来没有在子 class 的构造函数之外使用过它。是否可以从子 class 构造函数外部调用 super()?由于 super 仅在附加到派生 class 时才有意义,是否可以将其视为派生 class 的成员函数?我最初在尝试使用对象调用 super 时遇到了这个问题(只是试验)。

是否可以这样做?

class Animal {
    Animal() {
        System.out.println("Animal's constructor was called.");
    }
}

class Puppy extends Animal {
    Puppy() {
        System.out.println("Puppy's constructor was called.");
    }
}

public class Test {
    public static void main(String[] args) {
        Puppy pupper = new Puppy();
        pupper.super();
    }
}

不,那是不可能的,不在构造函数主体之外。

Java Language Specification § 8.8.7.1 表示如下:

ExplicitConstructorInvocation:
  [TypeArguments] this ( [ArgumentList] ) ;
  [TypeArguments] super ( [ArgumentList] ) ;
  ExpressionName . [TypeArguments] super ( [ArgumentList] ) ;
  Primary . [TypeArguments] super ( [ArgumentList] ) ;

在这里,在构造函数主体(§ 8.8.7)中,允许super(),但在其他任何地方都不允许。