Подтвердить что ты не робот

Super() в конструкторе

Я читаю код. В конструкторе он имеет super(), но класс реализует интерфейс, который, конечно, не имеет конструктора. Итак, какой super() он имеет в виду?

public class BoundingBox implements IBoundingVolume {

public BoundingBox() {
        super();
        mTransformedMin = new Number3D();
        mTransformedMax = new Number3D();
        mTmpMin = new Number3D();
        mTmpMax = new Number3D();
        mPoints = new Number3D[8];
        mTmp = new Number3D[8];
        mMin = new Number3D();
        mMax = new Number3D();
        for(int i=0; i<8; ++i) {
            mPoints[i] = new Number3D();
            mTmp[i] = new Number3D();
        }
}


public interface IBoundingVolume {
    public void calculateBounds(Geometry3D geometry);
    public void drawBoundingVolume(Camera camera, float[] projMatrix, float[] vMatrix, float[] mMatrix);
    public void transform(float[] matrix);
    public boolean intersectsWith(IBoundingVolume boundingVolume);
    public BaseObject3D getVisual();
}
4b9b3361

Ответ 1

super() относится к расширенному class (а не к реализованному интерфейсу). В этом случае Object

Таким образом, он вызовет конструктор в Object (который ничего не делает)

Ответ 2

Super ссылается на расширенный класс. По умолчанию это класс Object. Конструктор в Object ничего не делает. Другими словами, вы можете удалить эту строку, поскольку это не обязательно.

Также обратите внимание на то, что Oracle говорит об этой теме:

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

Источник: http://docs.oracle.com/javase/tutorial/java/IandI/super.html

Ответ 3

super вызывает конструктор расширенного класса. Все классы в Java получают от Object. Кроме того, если автор класса не создает конструктор для класса, создается конструктор по умолчанию, который ничего не делает.

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

Если вы хотите узнать больше о Object, вы можете прочитать исходный код Object.java здесь.

Ответ 4

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