Какой класс делает 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?
Ответы
Ответ 1
getClass
является одним из методов Object
и возвращает класс runtime this
:
Возвращает класс выполнения этого объекта. Возвращаемый объект класса - это объект, который заблокирован статическими синхронизированными методами представленного класса.
Итак, да, он всегда будет возвращать Derived
.