В то время как все ответы выше верны, новичкам немного сложно обернуть это в своей голове.Я попытаюсь ответить на вопрос заново для новичков.
Проблема, с которой столкнулся Аюш, заключалась в попытке создать экземпляр Object
для класса с помощью конструктора без аргументов.Однако этот класс имеет один или несколько параметризованных конструкторов, что приводит к ошибке времени компиляции.
Например, давайте создадим класс Student
с одним параметризованным конструктором и попытаемся создать его экземпляр с помощью no-arg.конструктор.
public class Student {
private String name;
private int rollNo;
public Student(String name, int rollNo) {
this.name = name;
this.rollNo = rollNo;
}
public static void main(String[] args) {
// The line below will cause a compile error.
Student s = new Student();
// Error will be "The constuctor Student() is undefined"
}
}
Woha!Но когда мы все вместе удаляем конструктор public Student(String name, int rollNo)
, ошибка исчезает и код компилируется.
Причина этой кажущейся аномалии заключается в том, что Java предоставляет нам только значения по умолчанию (no-arg) конструктор, когда мы не определяем никакого конструктора для этого класса самостоятельно.
Например, следующий класс поставляется с конструктором по умолчанию:
public class Student {
private String name;
private int rollNo;
}
становится:
public class Student {
private String name;
private int rollNo;
//Default constructor added by Java.
public Student() {
super();
}
}
Другими словами, в момент, когда мы определяем любой параметризованный конструктор, мы должны также определить конструктор без аргументов, если мы хотим создать экземпляр объекта этого класса с помощью конструктора без аргументов.
Также в случае наследования, подкласс без конструкторов;поставляется один конструктор по умолчанию.Этот конструктор по умолчанию, предоставляемый Java, как указано выше, вызывает конструктор суперкласса без аргументов.Если он не может его найти, он выдаст ошибку.
Так что да, это всегда хороший выбор для определения конструктора без аргументов / по умолчанию.
Ref: OracleУчебник по Java