Есть ли виртуальный конструктор в Java? - PullRequest
1 голос
/ 01 апреля 2011

есть ли термин вызов Виртуальный конструктор в Java? Тогда где нам нужно это использовать?

Ответы [ 5 ]

5 голосов
/ 01 апреля 2011

Виртуальные конструкторы не являются частью языка Java, но этот термин может применяться к некоторым шаблонам проектирования

Например, вызов object.clone() для объекта, который его поддерживает, приведет к созданию нового объекта (значительнокак new ClassName(object), если у вас есть конструктор копирования) и, таким образом, напоминает конструктор, но полиморфен.В «Эффективной Java» Джошуа Блох выступает за использование методов статической фабрики как еще одного способа достижения полиморфного создания объекта в определенных обстоятельствах.

Для использования термина в контексте C ++ смотрите: http://www.parashift.com/c++-faq-lite/virtual-functions.html#faq-20.8

3 голосов
/ 01 апреля 2011

Я не уверен, что вы подразумеваете под "виртуальным конструктором". Конструкторы вызываются рекурсивно вверх по иерархии классов. Каждый конструктор должен сначала вызвать конструктор суперкласса. (Вызов может быть опущен, если речь идет о конструкторе no-arg, и в этом случае компилятор автоматически вставит его.)

Кроме того, в Java нет виртуальных методов. Или, точнее, каждый метод экземпляра является виртуальным (в смысле C ++).

0 голосов
/ 24 мая 2019

В зависимости от определения виртуального конструктора.Если под виртуальным конструктором вы подразумеваете статический метод, который вызывает закрытый конструктор как часть некоторых фабричных шаблонов, то да, есть виртуальные конструкторы.Я нашел их очень полезными иногда, когда методы должны вызываться самостоятельно после создания.Все, что вам нужно сделать, это просто установить конструктор в private и включить в класс статический метод, который создает экземпляр объекта класса и возвращает его.Это полезно, когда необходимо вызвать методы объекта, прежде чем пользователь сможет его использовать.Так как ссылаться на себя в конструкторе очень плохо из-за того, что объект не полностью создан, можно использовать виртуальный конструктор для вызова методов после создания экземпляра и до того, как пользователь сможет получить к нему доступ.*

0 голосов
/ 01 апреля 2011

Не то чтобы я в курсе." Конструктор по умолчанию " да.В Delphi есть виртуальные конструкторы, в большинстве других языков нет.Смотрите шаблон Factory для чего-то связанного.

0 голосов
/ 01 апреля 2011

Что вы подразумеваете под виртуальными конструкторами?Если это похоже на виртуальную функцию в C ++, то в Java нет виртуального конструктора.

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