Это был вопрос, заданный в интервью. Можно ли назвать один конструктор из другого, если класс имеет несколько конструкторов в java и когда? Как я могу назвать синтаксис?
Вызывать один конструктор из другого в java
Ответ 1
Вы можете, и синтаксис, который я знаю,
this(< argument list >);
Вы также можете вызвать конструктор супер класса через
super(< argument list >);
Оба этих вызова могут быть выполнены только в качестве первого оператора в конструкторе (так что вы можете вызывать только один конструктор и прежде чем что-либо еще сделать).
Ответ 2
Да, вы можете это сделать.
Посмотрите на реализацию ArrayList
, например:
public ArrayList(int initialCapacity) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
}
/**
* Constructs an empty list with an initial capacity of ten.
*/
public ArrayList() {
this(10);
}
Второй конструктор вызывает первый с default capacity
из десяти.
Ответ 3
Ни один из ответов не является полным, поэтому я добавляю этот, чтобы заполнить пробелы.
Вы можете вызвать один конструктор из другого в том же классе или вызвать суперкласс со следующими ограничениями:
- Это должна быть первая строка кода в вызывающем конструкторе.
- Он не может иметь явной или неявной ссылки на
this
. Таким образом, вы не можете передавать внутренний класс (даже анонимный, если он ссылается на какие-либо методы экземпляра) или результат нестатического вызова метода в качестве параметра.
Синтаксис (как упоминалось другими):
MyClass() {
someInitialization();
}
MyClass(String s) {
this();
doSomethingWithS(s);
}
Ответ 4
FYI, это называется телескопический/телескопический шаблон конструктора.
Обсуждается в JLS 8.8.7.1 Явные вызовы конструктора
- Альтернативные вызовы конструктора начинаются с ключевого слова
this
(возможно, предваряемого явными аргументами типа). Они используются для вызова альтернативного конструктора того же класса.- Вызовы конструктора суперкласса начинаются либо с ключевого слова
super
(возможно, предваряемого явным аргументом типа), либо из первичного выражения. Они используются для вызова конструктора прямого суперкласса.
Ответ 5
this(other, args);
Ответ 6
пример:
public class FileDb {
/**
*
*/
public FileDb() {
this(null);
}
public FileDb(String filename) {
// ...
}
}