Внутренний класс (Inner class)

class Example {
    public class Inner {
        //Внутренний класс
    }
}

public class Program {
    public static void main(String[] args)
    {
        Example.Inner inner = new Example().new Inner();
    }
}

Сначала, Java создаёт объект класса Example, а после объект класса Inner?
_если да, то как можно обратиться к объекту Example?
_если нет, то что происходит при = new Example().?


Ответы (1 шт):

Автор решения: GreenBrown

Когда мы создаем объект «внутреннего» класса, в него незаметно передается ссылка на объект «внешнего» класса. Ведь наличие такого объекта — обязательное условие. Иначе мы не сможем создавать объекты внутреннего класса.

class Example {
    public Example() {
        System.out.println("Я класс Example");
    }
    
    public class Inner {
        public Inner() {
            System.out.println("Я класс Inner");
        }
    }
}

public class Program {
    public static void main(String[] args)
    {
        Example.Inner inner = new Example().new Inner();
    }
}

Вывод на консоль:
Я класс Example
Я класс Inner
Мы создали объект класса Example, но не записали адрес в ссылочную переменную.

class Example {
    public String name = "Я класс Example";
    
    public class Inner {
        public String name = "Я класс Inner";
        
        public Example getRefExample() {
            return Example.this;
        }
    }
}

public class Program {
    public static void main(String[] args)
    {
        Example.Inner inner = new Example().new Inner();
        Example example = inner.getRefExample();
        System.out.println(example.name);
    }
}

Вывод на консоль:
Я класс Example
ссылка на статью

→ Ссылка