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