Nel seguente frammento di codice, presumibilmente sembra che dovrebbe emettere qualche errore di compilazione, ma non è così:L'utilizzo di un nome di classe interna e un nome di oggetto stesso in Java
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
}
}
La classe Outer
ha una statica classe al suo interno denominata Inner
. Inoltre, dichiara un oggetto (statico) della classe Optional
(static Optional Inner = new Optional();
)
Questo scopo ed i nomi di classe (all'interno della classe Outer
) sono gli stessi che è Inner
. Il programma visualizza Optional
. L'unica espressione Outer.Inner.obj
all'interno di main()
è prevista per la visualizzazione di Inner
ma non è così. L'uscita effettiva è tuttavia Optional
, che è il caso della classe Optional
.
Un modo per visualizzare Inner
è cambiando il nome dell'oggetto in qualcos'altro.
static Optional Inner1 = new Optional();
Dall'output visualizza, risulta che il nome oggetto (o una variabile) viene scelto su un nome di tipo (classe Inner
) perché hanno lo stesso nome. Che caso esatto viene applicato qui?
+1 una risposta molto bella! – GingerHead
La cura di Downfer è un commento? – GingerHead
È davvero una bella risposta a una domanda che non è stata posta qui. – LuGo