При написании кода вы обычно не хотите повторяться.Если у вас есть класс, который может быть создан с различным числом параметров, общее решение, чтобы избежать повторения, состоит в том, чтобы просто вызвать другой конструктор со значениями по умолчанию в отсутствующих аргументах.Есть только одно досадное ограничение - это должна быть первая строка объявленного конструктора.Пример:
MyClass()
{
this(default1, default2);
}
MyClass(arg1, arg2)
{
validate arguments, etc...
note that your validation logic is only written once now
}
Что касается конструктора super()
, опять же, в отличие от доступа super.method()
, это должна быть первая строка вашего конструктора.После этого он очень похож на конструкторы this()
, DRY (не повторяйте себя), если расширяемый класс имеет конструктор, который делает то, что вы хотите, затем используйте его и затем продолжайте конструировать ваш объект, например:
YourClass extends MyClass
{
YourClass(arg1, arg2, arg3)
{
super(arg1, arg2) // calls MyClass(arg1, arg2)
validate and process arg3...
}
}
Дополнительная информация:
Даже если вы этого не видите, конструктор по умолчанию без аргументов всегда сначала вызывает super()
.Пример:
MyClass()
{
}
эквивалентен
MyClass()
{
super();
}
Я вижу, что многие упоминали использование ключевых слов this
и super
для методов и переменных - все хорошо.Просто помните, что у конструкторов есть уникальные ограничения на их использование, наиболее примечательным является то, что они должны быть самой первой инструкцией объявленного конструктора, и вы можете использовать только один.