Usando um nome de classe interna e um nome de objeto mesmo em Java
No trecho de código a seguir, presumivelmente parece que ele deve emitir algum erro de compilação, mas não:
class Outer {
public static class Inner {
static String obj = "Inner";
}
static Optional Inner = new Optional();
//The (inner) class name and the object name are same.
}
class Optional {
String obj = "Optional";
}
public class Main {
public static void main(String[] args) {
System.out.println(Outer.Inner.obj);
//Refers to the string inside the optional class
}
}
A classeOuter
tem uma classe estática dentro dele chamadoInner
. Além disso, ele declara um objeto (estático) da classeOptional
(static Optional Inner = new Optional();
)
Este objeto e os nomes das classes (dentro da classeOuter
) são os mesmos que sãoInner
. O programa exibeOptional
. A única expressãoOuter.Inner.obj
dentromain()
é esperado para exibirInner
mas isso não acontece. A saída real é no entantoOptional
qual é o caso doOptional
classe.
Uma maneira de exibirInner
é mudando o nome do objeto para outra coisa.
static Optional Inner1 = new Optional();
Na saída exibida, parece que o nome do objeto (ou uma variável) é escolhido sobre um nome de tipo (a classeInner
) porque eles têm o mesmo nome. Qual caso exato é aplicado aqui?