Javadoc, идентифицирующий конструктор суперкласса

1

Если я перейду на страницу Javadoc для класса RandomGenerator, я увижу сводку конструктора и методов класса. Он говорит, что public class RandomGenerator extends Random.

Как узнать дополнительную информацию о том, как RandomGenator class вызывает конструктор класса Random? Я не вижу ссылок в RandomGenerator class на конструктор суперкласса.

  • 1
    Javadoc о публичном контракте класса. Как он выполняет этот контракт, зависит от реализации. Какой конструктор суперкласса он называет, это его дело, а не ваше, по крайней мере, в том, что касается обязательств Javadoc.
Теги:
inheritance
superclass
subclass

3 ответа

1
Лучший ответ

Скорее всего, вам нужно связаться с авторами. По какой-то причине они решили не включать эту информацию в javadoc (публичный контракт).

Вы также можете изучить источники классов или использовать декомпилятор java, если у вас нет источников.

В случае, если конструктор класса не вызывает super() напрямую, это означает, что суперкласс имеет конструктор без аргументов, который всегда является первой строкой вашего конструктора классов, и вам не нужно явно его вызывать.

PS Мой ответ имеет два разных подхода. Я прошу прощения за это, я просто не совсем уверен, есть ли у вас источники для анализа.

1

Короткий ответ: вы не можете напрямую из javadocs.

Вы можете посмотреть на родительский класс, найти, что у него есть 2 конструктора, угадать, какой из них вызывается на основе параметров, которые предоставляет конструктор дочернего класса.

И, конечно, самый убедительный ответ можно получить, посмотрев исходный код, если он доступен или декомпилирует класс, если это не так.

1

Из документации:

Примечание. Если конструктор явно не вызывает конструктор суперкласса, компилятор Java автоматически вставляет вызов конструктору без аргументов суперкласса. Если у суперкласса нет конструктора без аргументов, вы получите ошибку времени компиляции. У объекта есть такой конструктор, поэтому, если Object является единственным суперклассом, проблем нет.

Поэтому они просто решили не писать вызов super конструктору и использовать по умолчанию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню