为什么我不能从静态上下文中使用“super”变量,即使“super”指的是父类而不是类实例,这与“this”不同?
我说的是java语言。
变量“this”在类内部使用时,是指该类的当前实例,这意味着您不能在静态方法中使用“this”。
但是,当在类内部使用时,“super”指的是该类的超类,而不是超类的实例,这应该意味着您可以在静态方法中使用“super”。但事实证明你不能。
一种可能的解释是说“超级”也指超类的一个实例,但我不明白为什么它应该......
我说的是java语言。
变量“this”在类内部使用时,是指该类的当前实例,这意味着您不能在静态方法中使用“this”。
但是,当在类内部使用时,“super”指的是该类的超类,而不是超类的实例,这应该意味着您可以在静态方法中使用“super”。但事实证明你不能。
一种可能的解释是说“超级”也指超类的一个实例,但我不明白为什么它应该......
以下是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
在这两种情况下,很明显需要一个实例对象。
此外,静态上下文与实例上下文有些不同,因为类不能重写静态方法,只能隐藏它们。
否,确实是指一个实例 - 引用当前对象的相同实例。它只是一种引用超类中定义的方法和字段的方法,这些方法和字段在当前类中被覆盖或隐藏。super
this