What happens when a Static Variable has the same name as a Static Class in Java?

前端 未结 2 1765
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-06 07:33

In the java example below, can anyone explain exactly why the output of the program is \"Orange\" ? (this is an interview question)

public class Finder {
  p         


        
2条回答
  •  隐瞒了意图╮
    2020-12-06 08:13

    The variable Y obscures the type Y. See the JLS:

    6.4.2. Obscuring

    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.

    The qualified name X.Y.Z is resolved according to:

    6.5.2. Reclassification of Contextually Ambiguous Names

    ...

    If the name to the left of the "." is reclassified as a TypeName, then:

    • If the Identifier is the name of a method or field of the type denoted by TypeName, this AmbiguousName is reclassified as an ExpressionName.

    • Otherwise, if the Identifier is the name of a member type of the type denoted by TypeName, this AmbiguousName is reclassified as a TypeName.

    • Otherwise, a compile-time error occurs.

    This is unlikely to occur in practice because of the normal naming conventions for types and variables.

提交回复
热议问题