Следующая программа использует внутренний класс с именем Anonymous
, который сам расширяет свой класс Main
.
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();
}
}
Единственный оператор в методе main () вызывает конструктор внешнего класса Main
, предоставляющий строку main , и только тогда вызывается метод reproduce()
.
reproduce method
содержит инструкцию new Anonymous().printName();
, которая вызывает метод printName()
для объекта класса Anonymous
. Конструктор super();
предоставляет новую строку , воспроизводящую , в свой суперкласс Main
.
Соответственно, оператор в методе printName
System.out.println(name());
должен отображать строку Воспроизвести вместо main , но он всегда отображает строку main . Почему это так?