Подкласс наследует конструкторы от этого суперкласса? - PullRequest
18 голосов
/ 04 марта 2011

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

Ответы [ 5 ]

34 голосов
/ 04 марта 2011

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

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

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

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

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

new Sub(10);

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

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

Из Спецификации языка Java, раздел 8.8 :

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

2 голосов
/ 04 марта 2011

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

2 голосов
/ 04 марта 2011

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

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

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

См. Также: Конструкторы никогда не наследуются

0 голосов
/ 30 августа 2017

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

0 голосов
/ 20 июля 2013

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

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

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

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

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