Наследование внутренних классов в java

244
12 мая 2017, 14:58

Объясните кто может, как происходит наследование вложенных non-static классов. На примере следующего кода:

public class Auto {
    public class Door {
        private double height;
        public Door(double height) {
            this.height = height;
        }
    }
}
public class LadaDoor extends Auto.Door {
    public LadaDoor(Auto auto) {
        auto.super(0);
    }
}

Почему конструктор выглядит именно так. Почему вызов super() на объекте внешнего класса вызывает конструктор внутреннего??

Answer 1

Экземпляр нестатического внутреннего класса всегда связан с экземпляром внешнего. В вашем случе Door не может существовать без какого-то конкретного экземпляра Auto.

Поэтому при создании экземпляра класса дочернего по-отношению к внутреннему необходимо связать его с объектом, который будет им владеть.

Выражение auto.super(0) обозначает вызов конструктора родительского класса (Auto.Door) в контексте экземпляра auto.

В терминологии языка Java это называется Qualified Superclass Constructor Invocation (конкретизированный вызов родительского класса).

Qualified superclass constructor invocations begin with a Primary expression or an ExpressionName. They allow a subclass constructor to explicitly specify the newly created object's immediately enclosing instance with respect to the direct superclass (§8.1.3). This may be necessary when the superclass is an inner class.

Адаптированный перевод:

Конкретизированный вызов конструктора родительского класса начинается с выражения. Оно позволяет конструктору дочернего класса явно указать экземпляр, который будет содержать в себе создаваемый объект. Это может быть необходимо, когда родительский класс является внутренним.

READ ALSO
Лагает при скролле RecyclerView

Лагает при скролле RecyclerView

Вообщем проблема такая, есть TabLayout и ViewPager, всего вкладок у меня 5, на первых двух вкладках идет RecyclerView с данными, а на 3 избранные, по началу...

350
GMP4J на андроиде с помощью ndk

GMP4J на андроиде с помощью ndk

Нашел проект который создает подобие javamath

199