El siguiente programa usa una clase interna llamada Anonymous
que a su vez amplía su clase incluida Main
.Una clase interna retorcida en Java
package name;
public class Main
{
private final String name;
Main(String name)
{
this.name = name;
}
private String name()
{
return name;
}
private void reproduce()
{
new Anonymous().printName();
}
private class Anonymous extends Main
{
public Anonymous()
{
super("reproduce");
}
public void printName()
{
System.out.println(name());
}
}
public static void main(String[] args)
{
new Main("main").reproduce();
}
}
La única declaración en el método main() invoca el constructor de la clase externa Main
suministro de una cadena principal y justo entonces el método reproduce()
está siendo llamado.
El reproduce method
figura la declaración de new Anonymous().printName();
que invoca el método en el objeto printName()
Anonymous
clase. El constructor super();
está suministrando una nueva cadena , que reproduce en su superclase adjunta Main
.
En consecuencia, la declaración dentro del método printName
System.out.println(name());
debe mostrar la cadena reproducir en lugar de principal pero siempre muestra la cadena principal . ¿Por que es esto entonces?
+1 Bien manchado. – skaffman