Подкласс наследует конструкторы от него суперкласса?

В подклассе мы можем инициализировать члены данных, используя конструктор подкласса, который внутренне вызывает конструктор суперкласса super(). Если подкласс не может наследовать конструкторы из своего суперкласса, то как вызов super() инициализирует суперкласс?

Ответы

Ответ 1

Конструктор из подкласса может вызывать конструкторы из суперкласса, но они не наследуются как таковые.

Чтобы быть ясным, это означает, что если у вас есть что-то вроде:

public class Super
{
    public Super(int x)
    {
    }
}

public class Sub extends Super
{
    public Sub()
    {
        super(5);
    }
}

то вы не можете написать:

new Sub(10);

потому что нет конструктора Sub(int).

Может быть полезно подумать о конструкторах как о неизмененных статических методах с неявным параметром инициализируемого объекта.

Из Java Language Spec, раздел 8.8:

Объявления конструктора не являются членами. Они никогда не унаследованы и поэтому не подлежат сокрытию или переопределению.

Ответ 2

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

Ответ 3

Ни один подкласс не может наследовать конструкторы своего суперкласса.

Конструкторы являются специальными членами функции класса, поскольку они не наследуются подклассом. Конструкторы используются для создания допустимого состояния для объекта при создании.

Одна из основных причин заключается в том, что вы, вероятно, не хотите переопределять конструктор суперклассов, что было бы возможно, если бы они были унаследованы. Предоставляя разработчику возможность переопределить конструктор суперклассов, вы можете подорвать возможности инкапсуляции языка.

Смотрите также: Конструкторы никогда не унаследованы

Ответ 4

Нет..Не на всех никогда... Подкласс Не наследует свой конструктор Суперкласса.. Вместо этого он может вызвать его Суперклассический конструктор Используя ключевое слово "super()"...

Ответ 5

Прежде всего, конструкторы не являются членами классов, и только члены наследуются.

Во-вторых, мы можем представить случаи, для которых мы не хотим, чтобы подклассы имели те же конструкторы, что и родительский класс.

Представьте себе абстрактный класс Vehicle с конструктором Vehicle (int wheels) и подклассом Bicycle.

По определению, у велосипеда есть 2 колеса, поэтому мы можем представить, что конструктор Bicycle будет называть super (2) и не лучше ли в этом случае, чтобы велосипед не показывал конструктор Bicycle (int wheels)?