Repito lo que ya te dijeron! Debes leer bien:
Creo que el error es por que cuando haces:
super(name);
En realidad no le estas pasando nada al constructor de la clase padre de Material, por eso da error. Intenta ponerle un valor a la variable name de la clase Author y creo que no debiera darte error.
Salu2.
¿Sabes que hace
super()?
Se utiliza para invocar el constructor de la superclase, y dentro de los paréntesis van los parámetros que requiere es constructor.
Por lo tanto, si dices:
public class Material extends Author {
/** Maximum number of Authors in any Material */
private static final int MAX_AUTHORS = 3;
/** Material Authors */
private Author[] authors;
/** Authors number */
private int authorsN;
/** Materials Title */
/**
* Constructor.
* @param title The title of this material
*/
public Material
(String title
) { super(name); //Énfasis aquí
this.title = title;
this.authorsN = 0;
}
Si la clase Material no la modifico y la dejo tal cual está,
el compilador dice que no ve la variable name. Si le añado un parametro
String name al constructor Material, Eclipse no me compila y me da error en el Main (Material m1 - m5).
Lo que no entiendo es porque si pongo super (title) me compila bien.Obvio es que no te vea la variable
name, no está definida dentro del ámbito desde el cual estas haciendo referencia. Estas invocando al constructor de la superclase pasándole una variable que no existe como parámetro. Tendrías que ver que lógica tiene tu POO para saber que valor le vas a dar.
De cualquier caso, si al constructor de
Material le añades un "
String name" es obvio que te de error de compilación en donde dices, pues al instanciar
Material desde la clase
Main debes darle un valor al parámetro del constructor que añadiste.
Espero entiendas.
Salu2s