Super () в абстрактном классе

У меня есть такая программа:

public abstract class geometricFigure {
    private int dim1, dim2;

    public geometricFigure(int dim1, int dim2) {
        super();
        this.dim1 = dim1;
        this.dim2 = dim2;
    }

    public geometricFigure() {
        this.dim1 = 0;
        this.dim2 = 0;
    }
}

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

Кстати. Этот класс расширен двумя другими классами, называемыми Echilateral Triangle и Circle.

public class echilateralTriangle extends geometricFigure {
    public echilateralTriangle() {
        super(1, 1);
    }

    public echilateralTriangle(int dim1, int dim2) {
        super(dim1, dim2);
    }
}

Класс круга:

public class Circle extends geometricFigure {
    public Circle() {
        super(1, 1);
    }

    public Circle(int dim1, int dim2) {
        super(dim1, dim2);
    }
}

person cristianix    schedule 29.03.2017    source источник
comment
Каждый класс в Java расширяет Object даже ваш geometricFigure   -  person Onheiron    schedule 29.03.2017
comment
Помните, что существует Object класс, поэтому я бы предположил, что даже если ваш абстрактный класс явно не расширяет какой-либо класс, вызов super() в конечном итоге все равно там закончится.   -  person domsson    schedule 29.03.2017
comment
super() вызывает конструктор суперкласса без аргументов (Object в вашем случае). Это автоматически добавляется к любому конструктору, который не содержит вызова super() или this() компилятором.   -  person Thomas    schedule 29.03.2017
comment
Используйте стандартные соглашения об именах. Имена классов должны начинаться с заглавных букв. Следуя соглашению, всем будет легче читать ваш источник.   -  person John Bollinger    schedule 29.03.2017
comment
Значит, он вызывает конструктор из класса Object?   -  person cristianix    schedule 29.03.2017
comment
Да, точно. Смотрите ответ, который у вас есть. Также к тем, кто проголосовал против: разве это не интересный и актуальный вопрос? Конечно, это очевидно для большинства из вас, но все же интересно для других.   -  person domsson    schedule 29.03.2017
comment
Хорошо, но если параметризованный конструктор геометрической фигуры создает экземпляры переменных dim1 и dim2, зачем вообще вызывать метод super (), также известный как конструктор по умолчанию для класса Object?   -  person cristianix    schedule 29.03.2017


Ответы (1)


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

person Mureinik    schedule 29.03.2017