Why default constructor is required(explicitly) in a parent class if it
has an argumented constructor
¡No necesariamente!
En su clase B
class B extends A {
}
usted no ha proporcionado ninguna constructor de la clase B por lo que se coloca un constructor por defecto. Ahora es una regla que cada constructor debe llamar a uno de sus constructores de clase superior.En su caso, el constructor predeterminado en la Clase B intentará llamar al constructor predeterminado en la clase A (es padre) pero como no tiene un constructor predeterminado en la Clase A (ya que ha proporcionado explícitamente un constructor con argumentos en la clase A, lo hará no tiene un constructor predeterminado en la Clase A) obtendrá un error.
Lo que posiblemente podría hacer es
O no proporcionan argumentos del constructor de la clase A.
A()
{
//no arg default constructor in Class A
}
O
explícitamente escribir sin argumentos del constructor en B y llame a su estupenda con algunos argumentos int por defecto.
B()
{
super(defaultIntValue);
}
El fondo es que para que se cree un objeto completamente constructores de cada padre en la jerarquía de herencia deben ser llamados. A cuáles llamar es realmente su elección de diseño. Pero en caso de que no proporcione explícitamente ningún java, pondrá la llamada de constructor predeterminada super() como primera línea de cada uno de los constructores de su clase secundaria y, si no tiene eso en la superclase, obtendrá un error.
@ user358099: Para dejar en claro que estaba tratando de llamar al superconstructor sin parámetros. –