elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Duda herencia de constructor
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda herencia de constructor  (Leído 2,225 veces)
bettu


Desconectado Desconectado

Mensajes: 923


Ver Perfil
Duda herencia de constructor
« en: 26 Octubre 2015, 01:20 am »

Hola,

Estoy realizando una ampliación de una aplicación de clase y me encuentro encallado en el tema de herencia (intentaré explicarme lo mejor posible):

En el ejercicio hay tres clases: Author, Main y Material.
La clase Main no la puedo modificar (normas del enunciado).
Material debe ser la clase heredada de Author.

Realizo la herencia así (adjunto solo una parte de código):

Material.java
Código
  1. public class Material extends Author {
  2.  
  3. /** Maximum number of Authors in any Material */
  4. private static final int MAX_AUTHORS = 3;
  5.  
  6. /** Material Authors */
  7. private Author[] authors;
  8.  
  9. /** Authors number */
  10. private int authorsN;
  11.  
  12. /** Materials Title */
  13. private String title;
  14.  
  15. /**
  16.  * Constructor.
  17.  * @param title The title of this material
  18.  */
  19. public Material(String title) { //si lo dejo asi, el compilador me dice que debo hacer modificaciones en la clase Author. Si en vez de (String title) anado (String title, String name) me aparece problema de compilado en la clase main.
  20. super(name); //si en vez de name escribo title el programa me compila bien
  21. this.title = title;
  22. this.authorsN = 0;
  23. }

Añado las lineas en que me da error el compilador en la clase main si el constructor fuera Material (String title, String name):

Main.java
Código
  1. public static void main(String args[]) {
  2.    Material m1 = new Material("Object Oriented Programming. Java practices");
  3.    Material m2 = new Material("UML cases");
  4.    Material m3 = new Material("Introduction to Programming");
  5.    Material m4 = new Material("Algebra Theory");
  6.    Material m5 = new Material("Graph Theory");
  7. }

Y añado lo que debo modificar si dejo:
Código:
public Material(String title) { 
super(name);

Author.java
Código
  1. //private String name; original
  2. protected static String name; //lo que debo modificar segun el compilador

Qué hago mal? Qué es lo correcto? Espero haberme explicado bien.


Gracias,


En línea

PabloPbl

Desconectado Desconectado

Mensajes: 188


Ver Perfil
Re: Duda herencia de constructor
« Respuesta #1 en: 26 Octubre 2015, 06:26 am »

Creo que el error es por que cuando haces:

Código
  1. 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.


En línea

bettu


Desconectado Desconectado

Mensajes: 923


Ver Perfil
Re: Duda herencia de constructor
« Respuesta #2 en: 26 Octubre 2015, 09:48 am »

Hola,

No, tengo el mismo problema. Adjunto la clase Author:

Código
  1. import java.util.Vector;
  2.  
  3. public class Author{
  4.  
  5. /** Name of the Author */
  6. private String name;
  7.  
  8.  
  9. /**
  10.  * Constructor.
  11.  * @param name Name of the author
  12.  */
  13. public Author(String name) {
  14. this.name = name;
  15. }
  16.  
  17. /**
  18.  * Gets the name of the Author
  19.  * @return Name of the author
  20.  */
  21. public String getName() {
  22. return this.name;
  23. }
  24.  
  25.  
  26. }

Adjunto una parte de la clase Main:
Código
  1. public class Main1 {
  2.  
  3. /**
  4.  * Entry point.
  5.  * @param args Command-line arguments
  6.  */
  7. public static void main(String args[]) {
  8.    Material m1 = new Material("Object Oriented Programming. Java practices");
  9.    Material m2 = new Material("UML cases");
  10.    Material m3 = new Material("Introduction to Programming");
  11.    Material m4 = new Material("Algebra Theory");
  12.    Material m5 = new Material("Graph Theory");
  13.    Author a1 = new Author("John Pitt");
  14.    Author a2 = new Author("Ella Stallone");
  15.    Author a3 = new Author("Josh MacQueen");
  16.    Author a4 = new Author("Peter Hoffmann");
  17.    Author a5 = new Author("Stella Clooney");
  18.    Author a6 = new Author("George Damon");
  19.    Author a7 = new Author("Sarah Burton");
  20.  
  21.    // ADD AUTHOR a1 TO MATERIAL m1
  22.    m1.addAuthor(a1);
  23.    // ADD AUTHOR a5 TO MATERIAL m1
  24.    m1.addAuthor(a5);
  25.    // ADD AUTHOR a6 TO MATERIAL m1
  26.    m1.addAuthor(a6);
  27.    // a5 is already author of m1, it should not be added again
  28.    m1.addAuthor(a5);
  29.    m2.addAuthor(a1);
  30.    m3.addAuthor(a2);
  31.    m3.addAuthor(a7);
  32.    m4.addAuthor(a2);
  33.    m4.addAuthor(a4);
  34.    m4.addAuthor(a3);
  35.    // Try to add 1 more author than the maximum number of authors a material can have
  36.    m4.addAuthor(a1);

Y adjunto parte de la clase Material:
Código
  1. public class Material extends Author {
  2.  
  3. /** Maximum number of Authors in any Material */
  4. private static final int MAX_AUTHORS = 3;
  5.  
  6. /** Material Authors */
  7. private Author[] authors;
  8.  
  9. /** Authors number */
  10. private int authorsN;
  11.  
  12. /** Materials Title */
  13. private String title;
  14.  
  15. /**
  16.  * Constructor.
  17.  * @param title The title of this material
  18.  */
  19. public Material(String title) {
  20. super(name);
  21. this.title = title;
  22. this.authorsN = 0;
  23. }

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.
En línea

DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: Duda herencia de constructor
« Respuesta #3 en: 26 Octubre 2015, 17:50 pm »

Repito lo que ya te dijeron! Debes leer bien:

Creo que el error es por que cuando haces:

Código
  1. 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:

Código
  1. public class Material extends Author {
  2.  
  3. /** Maximum number of Authors in any Material */
  4. private static final int MAX_AUTHORS = 3;
  5.  
  6. /** Material Authors */
  7. private Author[] authors;
  8.  
  9. /** Authors number */
  10. private int authorsN;
  11.  
  12. /** Materials Title */
  13. private String title;
  14.  
  15. /**
  16.  * Constructor.
  17.  * @param title The title of this material
  18.  */
  19. public Material(String title) {
  20. super(name); //Énfasis aquí
  21. this.title = title;
  22. this.authorsN = 0;
  23. }

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
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda en constructor copia
Programación C/C++
__fnx__ 5 3,828 Último mensaje 3 Agosto 2011, 03:16 am
por Karman
Duda array en constructor
Java
KaRaLLo 4 16,327 Último mensaje 23 Enero 2012, 01:59 am
por leogtz
En java excepcion en un constructor DNI (DUDA TONTA)
Java
juanoide 1 2,279 Último mensaje 13 Noviembre 2013, 11:48 am
por egyware
[DUDA] Sobre Constructor-Destruct.
Programación C/C++
Rockstar97 1 1,639 Último mensaje 15 Abril 2015, 21:46 pm
por ivancea96
Duda en herencia
Programación C/C++
OmarZamora7 1 1,918 Último mensaje 12 Agosto 2016, 14:20 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines