2011-12-28 3 views
0

Можно создать дубликат:
Java Constructor InheritanceПочему конструкторы класса Java не унаследованы?

При создании подклассов,

  1. Почему я должен создать конструктор и написать супер в каждом CTOR?
  2. Если мое поведение аналогично суперклассу, я не должен наследовать их также?
+4

возможно уже ответил: http://stackoverflow.com/questions/1644317/java-constructor-inheritance – Eugene

+0

Вам не нужно писать в 'super' в каждом конструкторе, обязательно. Предположим, что суперкласс имеет конструктор по умолчанию (public no-argument). Подкласс будет, если вы укажете в нем никаких конструкторов, неявно получить конструктор по умолчанию, который просто вызывает 'super();' во время компиляции. Любой конструктор, который вы явно создаете, будет иметь неявный вызов 'super();' в качестве его первой строки, если только в первой строке конструктора явным образом не вызову одного из перегруженных конструкторов в суперклассе (например, 'super (myParameter); '). – hotshot309

ответ

1

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

Чтобы быть справедливым, по умолчанию (без конструктора arg) всегда существует. Я предполагаю, что это конкретные аргументы, о которых вы говорите.

+0

Если вы проголосуете, объясните, пожалуйста, пожалуйста. Я постараюсь сделать свой ответ лучше. – Kylar

+0

по умолчанию существует, когда по умолчанию в супер существует другие слова, если все суперконструкторы все нужны args, тогда конструктор по умолчанию не создается (или генерирует ошибки компиляции). –

+0

Всякий раз, когда вы создаете класс, он получает конструктор по умолчанию. Независимо от того, существует ли в супер. – Kylar

0

В действительности, Java всегда создает новые конструкторы для ваших подклассов, но только для стандартного конструктора без параметров. Если у вашего класса есть конструкторы, отличные от конструктора по умолчанию (без параметров), вы должны определить их снова ... Конструкторы не предназначены для поведения, но скорее для инициализации объекта (что может измениться для подклассов с новыми атрибутами)

+0

«Всегда» неверно. Для классов, не имеющих объявлений конструктора, предоставляется конструктор по умолчанию. –

+0

прав, спасибо :) – Slash

0

По умолчанию no argument Constructor наследуется и вызывается по умолчанию. Если вы хотите позвонить другому, вы можете использовать super(). В случае, если конструктор по умолчанию не может быть использован, вы должны использовать один4 доступных суперконструкторов

+1

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

0

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

+0

Конструкторы никогда не унаследованы. Конструктор по умолчанию вызывает конструктор без аргументов суперкласса. –

0

Конструкторы вызываются для создания объектов из плана класса, то есть для инициализации элементов данных класса. Если подкласс должен был наследовать конструктор, то при вызове подкласса вам также понадобятся знания о членах родительского класса. Это не то, что можно увидеть в сценарии реальной жизни. Например, если вы создадите объект типа Ferrari, вам определенно будет интересно инициализировать параметры, такие как скорость, ускорение, и вы не будете беспокоиться об инициализации параметров объекта Car, хотя Ferrari наследуется от Car. Поэтому, вызывая конструктор Ferrari, вы только и будете беспокоиться только о членах Ferrari, а не о членах его родительского класса. Надеюсь, я четко сформулировал свою точку зрения.

Смежные вопросы