2015-05-01 3 views

ответ

0

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

Вы хотите вызвать конструктор суперкласса, который имеет параметры

Вы хотите цепи другого конструктора в том же классе вместо конструктора суперкласса

3

super() вызывает беспараметрический конструктор суперкласса.

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

+0

Я думаю, что этот ответ неполный без объяснения того, что каждый класс в Java продолжается от Object и вызов super для класса который не расширяет какой-либо класс, напрямую переводит на вызов no arg constr Учреждение Объекта. См. Мой ответ. – CKing

5

От Oracle docs

С супер(), конструктор суперкласса без аргументов называется. С супер (список параметров) вызывается конструктор суперкласса с соответствующим списком параметров .

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

2

Вызов конструктора суперкласса должен быть первой строкой в ​​конструкторе подкласса.

Синтаксис для вызова конструктор суперкласса является

super(); // the superclass no-arg constructor is called 

или:

super(params);//the superclass constructor with a matching params is called 

Примечание:

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

1

Цель super ключевое слово в Java, чтобы позволить вам получить доступ к полям экземпляра, методы экземпляра или конструктор супер класса, от которого класс проходит.

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

Даже если вы не поместите вызов super() явно в конструктор, компилятор добавит его.

1

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

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

Если вы вызываете super(...) с параметрами, то вызывается конструктор суперкласса с соответствующими параметрами.

Как говорили другие, если вы не вызываете super() самостоятельно, компилятор его назовет.

Смежные вопросы