Какой класс делает getClass() отчет внутри конструктора базового класса - программирование
Подтвердить что ты не робот

Какой класс делает getClass() отчет внутри конструктора базового класса

В Java можно с уверенностью предположить, что getClass(), вызванный внутри конструктора класса, используемого в качестве базового класса, предоставит информацию о производном классе, а не классе базового класса?

Кажется, что это работает, но я думаю, что это не обязательно означает, что это безопасно. Например, если у меня есть следующие два класса:

public class Parent {
    public Parent() {
        System.out.println(getClass().getName());
    }
}

и

public class Derived extends Parent {
    public Derived() {
        super();
    }

    public static void main(String... args) {
        new Derived();
    }
}

Когда я запускаю метод main() в классе Derived, он печатает: Derived (именно это я и надеялся). Но могу ли я полагаться на это поведение в JVM?

4b9b3361

Ответ 1

getClass является одним из методов Object и возвращает класс runtime this:

Возвращает класс выполнения этого объекта. Возвращаемый объект класса - это объект, который заблокирован статическими синхронизированными методами представленного класса.

Итак, да, он всегда будет возвращать Derived.