Искаженный внутренний класс в Java

Следующая программа использует внутренний класс с именем 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 . Почему это так?

5
задан Lion 16 November 2011 в 23:31
поделиться