Ответ 1
super()
относится к расширенному class
(а не к реализованному интерфейсу). В этом случае Object
Таким образом, он вызовет конструктор в Object
(который ничего не делает)
Я читаю код. В конструкторе он имеет 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();
}
super()
относится к расширенному class
(а не к реализованному интерфейсу). В этом случае Object
Таким образом, он вызовет конструктор в Object
(который ничего не делает)
Super ссылается на расширенный класс. По умолчанию это класс Object. Конструктор в Object ничего не делает. Другими словами, вы можете удалить эту строку, поскольку это не обязательно.
Также обратите внимание на то, что Oracle говорит об этой теме:
Если конструктор явно не вызывает конструктор суперкласса, компилятор Java автоматически вставляет вызов конструктору без аргументов суперкласса. Если у суперкласса нет конструктора без аргументов, вы получите ошибку времени компиляции. У объекта есть такой конструктор, поэтому, если Object является единственным суперклассом, проблем нет.
Источник: http://docs.oracle.com/javase/tutorial/java/IandI/super.html
super
вызывает конструктор расширенного класса. Все классы в Java получают от Object
. Кроме того, если автор класса не создает конструктор для класса, создается конструктор по умолчанию, который ничего не делает.
В вашем случае super
вызывает конструктор по умолчанию Object
.
Если вы хотите узнать больше о Object
, вы можете прочитать исходный код Object.java
здесь.
Теперь позвольте мне рассказать вам настоящую причину, по которой мы используем super() здесь, если мы хотим вызвать конструктор суперкласса напрямую. когда мы вызываем конструктор, то многие иерархии могут вызываться в иерархии, поэтому для устранения этого мы можем использовать super(). Во время тестовых случаев вы можете иметь дело с "Не указывайте никаких дополнительных конструкторов, кроме тех, которые задаются в формулировке проблемы", поэтому решение заключается в использовании Super() в вашем конструкторе.