что происходит, когда кто-то вызывает super в конструкторе класса, наследуемого от абстрактного класса? - PullRequest
0 голосов
/ 14 июля 2020

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

Давайте возьмем пример.

public abstract class Figure { // cant be instantiated
    private type firstAttribute;
    private type secondAttribute;

    public Figure(type firstAttribute, type secondAttribute) {
        this.fisrtAttribute = fisrtAttribute;
        this.fisrtAttribute = fisrtAttribute;
    }

    protected abstract void anyMethod();
}

class Rectangle extends Figure {
    public Rectangle(type firstAttribute, type secondAttribute) {
        
        /*
         * call the abstract class constructor but we know, a 
         * constructor is used to
         * instantiate class and we can't instantiate an abstract class
         */
        super(firstAttribute, secondAttribute);
        
        // then what really happen ?
    }

     @override
     ....
}

Ответы [ 3 ]

3 голосов
/ 14 июля 2020

Путаница возникает из-за того, что вызов конструктора super() на самом деле не создает экземпляр суперкласса. Он просто вызывает конструктор super(). Ни больше, ни меньше.

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

1 голос
/ 14 июля 2020

Абстрактный базовый класс инициализирует любые свойства, которые вы наследуете в своем конкретном наследующем классе, поэтому вы можете избежать дублирования кода при инициализации.

0 голосов
/ 14 июля 2020

Я выполняю код в конструкторе, который он вызывает.

Нет необходимости создавать для этого экземпляр абстрактного класса; в конце концов, во время вызова конструктора экземпляр класса еще никогда не создается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...