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

На Яве можно предположить, что 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 (на это я и надеялся). Но могу ли я рассчитывать на такое поведение в JVM?

1 ответ

Решение

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

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

Так что да, он всегда вернется Derived,

Другие вопросы по тегам