Using an inner class name and an object name same in Java

前端 未结 3 911
执念已碎
执念已碎 2021-02-13 23:31

In the following code snippet, presumably it appears that it should issue some compilation error but it doesn\'t:

class Outer {
    public static class Inner {
          


        
3条回答
  •  谎友^
    谎友^ (楼主)
    2021-02-13 23:46

    Paragraph 6.4.2 of the Java Language Specification has some information about the rules that apply in this case.

    A simple name may occur in contexts where it may potentially be interpreted as the name of a variable, a type, or a package. In these situations, the rules of §6.5 specify that a variable will be chosen in preference to a type, and that a type will be chosen in preference to a package. Thus, it is may sometimes be impossible to refer to a visible type or package declaration via its simple name. We say that such a declaration is obscured.

    This refers to paragraph 6.5 Determining the Meaning of a Name, which explains the rules in detail.

    In your example, Outer.Inner could refer to the type of the nested class named Inner, or the static member variable Inner. The rules say the variable will be chosen over the type.

提交回复
热议问题