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()
,但在其他任何地方都不允许。
所以我理解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()
,但在其他任何地方都不允许。