Подтвердить что ты не робот

Почему абстрактные классы в Java имеют конструкторы?

Почему класс abstract в Java имеет constructor?

Что это такое, поскольку мы не можем создать экземпляр класса abstract?

Любые мысли?

4b9b3361

Ответ 1

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

Представьте, что ваш абстрактный класс имеет поля x и y и что вы всегда хотите, чтобы они были инициализированы определенным образом, независимо от того, какой конкретный конкретный подкласс в конечном итоге будет создан. Таким образом, вы создаете конструктор и инициализируете эти поля.

Теперь, если у вас есть два разных подкласса вашего абстрактного класса, когда вы создаете их, их вызовы будут вызываться, а потом родительский конструктор будет вызван и поля будут инициализированы.

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

Ответ 2

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

Ответ 3

Две причины для этого:

1) Абстрактные классы имеют constructors, и эти конструкторы всегда вызывается, когда создается конкретный подкласс. Мы знаем, что когда мы собираемся создать экземпляр класса, мы всегда используем конструктор этого класса. Теперь каждый конструктор вызывает конструктор своего суперкласса с неявным вызовом super().

2) Мы знаем, что конструктор также используется для инициализации полей класса. Мы также знаем, что абстрактные классы могут содержать поля, а иногда они должны быть инициализированы каким-то образом с помощью конструктора.

Ответ 4

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

Ответ 5

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

Ответ 6

Я полагаю, что корень этого вопроса заключается в том, что люди считают, что вызов конструктора создает объект. Это не относится к делу. Java нигде не утверждает, что вызов конструктора создает объект. Он просто делает то, что мы хотим, чтобы конструктор выполнял, например, инициализацию некоторых полей. Таким образом, вызываемый абстрактный конструктор классов не означает, что его объект создан.

Ответ 7

Реализация мудрого вы часто увидите внутри оператора super() в конструкторах подклассов, что-то вроде:


public class A extends AbstractB{

  public A(...){
     super(String constructorArgForB, ...);
     ...
  }
}