Il seguente programma utilizza una classe interna denominata Anonymous
che estende la sua classe di inclusione Main
.Una classe interna distorta in 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();
}
}
L'unica affermazione nel metodo main() invoca il costruttore della classe esterna Main
fornendo una stringa principale e solo allora il metodo reproduce()
viene chiamato.
Il reproduce method
contiene la dichiarazione new Anonymous().printName();
, che richiama il metodo printName()
sull'oggetto Anonymous
di classe. Il costruttore super();
sta fornendo una nuova stringa riproducendo alla sua super classe che include Main
.
Pertanto, l'istruzione all'interno del metodo printName
System.out.println(name());
dovrebbe visualizzare la stringa riprodurre anziché principale ma visualizza sempre la stringa principale. Perché è così?
+1 Ben individuato. – skaffman