为什么我不能从静态上下文中使用“super”变量,即使“super”指的是父类而不是类实例,这与“this”不同?

2022-09-04 05:50:21

我说的是java语言。

变量“this”在类内部使用时,是指该类的当前实例,这意味着您不能在静态方法中使用“this”。

但是,当在类内部使用时,“super”指的是该类的超类,而不是超类的实例,这应该意味着您可以在静态方法中使用“super”。但事实证明你不能。

一种可能的解释是说“超级”也指超类的一个实例,但我不明白为什么它应该......


答案 1

以下是JLS中关于关键字的部分:super

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.11.2

表单引用名为“当前对象的标识符”的字段,但当前对象被视为当前类的超类的实例。super.Identifier

表单引用与 T 对应的词法封闭实例的名为标识符的字段,但该实例被视为 T 超类的实例。T.super.Identifier

在这两种情况下,很明显需要一个实例对象。


此外,静态上下文与实例上下文有些不同,因为类不能重写静态方法,只能隐藏它们。


答案 2

否,确实是指一个实例 - 引用当前对象的相同实例。它只是一种引用超类中定义的方法和字段的方法,这些方法和字段在当前类中被覆盖或隐藏。superthis