Why can I not use “super” variable from a static context, even though “super” refers to the parent class and NOT a class instance, unlike “this”?

亡梦爱人 提交于 2019-11-29 01:21:12

问题


I'm talking java language.

Variable "this", when used inside a class, refers to the current instance of that class, which means you cannot use "this" inside a static method.

But "super", when used inside a class, refers to the superclass of that class, not an instance of the superclass, which should mean that you can use "super" inside a static method. But it turns out you cannot.

A possible explanation would be to say that "super" also refers to an instance of the superclass, but I can't see why it should...


回答1:


Here is the section in the JLS about the super keyword:

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

The form super.Identifier refers to the field named Identifier of the current object, but with the current object viewed as an instance of the superclass of the current class.

The form T.super.Identifier refers to the field named Identifier of the lexically enclosing instance corresponding to T, but with that instance viewed as an instance of the superclass of T.

In both cases, it is clear that an instance object is needed.


Also, a static context is somewhat different from an instance context, as a class can't override static methods, only hide them.




回答2:


No, super does refer to an instance -- the same instance that this refers to -- the current object. It's just a way to reference methods and fields in defined in the superclass that are overridden or hidden in the current class.




回答3:


You can't use super from a static context for the same reason you can't use this in a static context. In both cases, the word refers to an instance.

In a static context, you can always use the name of the superclass explicitly:

class Sub extends Base {
    static void func() {
        Base.func();
        . . .
    }
}



回答4:


Super is a non static variable and non static entity cannot be accessed from static context.



来源:https://stackoverflow.com/questions/14112792/why-can-i-not-use-super-variable-from-a-static-context-even-though-super-re

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!