Si bien todas las respuestas anteriores son correctas, es un poco difícil para los recién llegados envolverlo en sus cabezas. Trataré de responder la pregunta de nuevo para los recién llegados.
El problema que Ayush enfrentaba era al intentar crear una instancia de un Object
para una clase a través de un constructor sin argumentos. Sin embargo, esta clase tiene uno o más constructores parametrizados y esto da como resultado un error de tiempo de compilación.
Por ejemplo, permítanos crear una clase Student
con un único constructor parametrizado e intente crear una instancia a través del constructor 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! Pero cuando eliminamos el public Student(String name, int rollNo)
constructor todos juntos, el error se ha ido y el código se compila.
La razón detrás de esta aparente anomalía reside en el hecho de que Java sólo se nos proporciona el valor por defecto (sin argumentos) cuando el constructor no definimos ninguna constructora de dicha clase por nuestra cuenta.
Por ejemplo, la siguiente clase se suministra con un contructor por defecto:
public class Student {
private String name;
private int rollNo;
}
se convierte en:
public class Student {
private String name;
private int rollNo;
//Default constructor added by Java.
public Student() {
super();
}
}
En otras palabras, el momento en que definimos ningún constructor con parámetros, que necesidad también define un constructor no-arg si queremos instanciar el objeto de esa clase a través de un constructor no-arg.
También en caso de herencia, una subclase sin constructores; se suministra un constructor predeterminado . Este constructor predeterminado suministrado por Java como el anterior llama al constructor no-arg de la superclase. Si no puede encontrar uno, arrojará un error.
Así que sí, siempre es una buena opción para definir un constructor no arg/predeterminado.
Ref: Oracle Java Tutorial
[Enlace a los documentos] (https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html): "No tiene que proporcionar ningún constructor para su clase, pero debe tenga cuidado al hacer esto. El compilador proporciona automáticamente un constructor predeterminado sin argumentos para cualquier clase sin constructores. Este constructor predeterminado llamará al constructor sin argumentos de la superclase. En esta situación, el compilador se quejará si la superclase no funciona t tiene un constructor sin argumentos, por lo que debe verificar que lo haga ". – ruhong
Y de forma predeterminada ¿Objeto es la superclase de todas las clases, se llama al constructor sin argumentos para Object? – Lucky
@Lucky Todas las clases implícitamente extienden 'Objeto', así que sí, se llama' Objeto() '. –