При изучении Java-рефлексии у меня возникла некоторая проблема при тестировании getSuperclass()
Ниже приведен мой тестовый код:
System.out.println(java.io.Closeable.class.getSuperclass());
В моем ожидании эта строка должна напечатать что-то вроде AutoClosable
потому что это класс, от которого Closable
расширяется. Однако это оказывается null
. Я попытался объяснить это как Closable находит в java.io
, тогда как AutoClosable находит в java.lang
и getSuperclass()
будет искать только в области действия пакета.
Но это объяснение не имеет смысла, если я напишу так:
Closeable closeable = () -> {
};
System.out.println(closeable.getClass().getSuperclass());
Приведенный выше код приводит к class java.lang.Object
. Результат делает эту проблему более специфической и трудной для понимания.
Как java реализует этот метод getSuperclass()
и почему этот метод не возвращает результат, соответствующий его имени?