Autor Tema: Java cómo crear clases que hereden de clases abstractas sobreescribir CU00695B  (Leído 2330 veces)

dferna

  • Sin experiencia
  • *
  • Mensajes: 25
    • Ver Perfil
Hola  ;)

Aquí dejo la resolución al ejercicio CU00695B del taller de programación orientada a objetos con Java y BlueJ sobre las clases y métodos abstractos


Clase TestHerenciaAbstractos

Código: [Seleccionar]
package test;

import aplicacion.*;
import java.util.ArrayList;

public class TestHerenciaAbstractos {

public static void main(String[] args) {

ArrayList<Legislador> legisladores = new ArrayList<Legislador>();
Diputado diputado1 = new Diputado("Pablo", "Iglesias", 38);
Diputado diputado2 = new Diputado("Iñigo", "Errejon", 34, "Madrid");
Senador senador1 = new Senador("Pedro", "Sanchez", 40);
Senador senador2 = new Senador("Antonio", "Morales", 45, "Sevilla");

legisladores.add(diputado1);
legisladores.add(diputado2);
legisladores.add(senador1);
legisladores.add(senador2);

System.out.println("Listado de legisladores:");
for(Legislador legislador : legisladores){
System.out.println("Camara en la que trabaja: "+legislador.getCamaraEnQueTrabaja());
System.out.println("Datos del legislador: "+legislador.toString());
System.out.println("");
}
}

}


Superclase Persona de la que herada la clase abstracta Legislador

Código: [Seleccionar]
package aplicacion;

/**
 * Superclase Persona de la que hereda la clase abstracta Legislador
 * @author David
 *
 */
public class Persona {

private String nombre;
private String apellidos;
private int edad;

//Constructor
public Persona(){
nombre = "";
apellidos = "";
edad = 0;
}

//Constructor sobrecargado
public Persona(String nombre, String apellidos, int edad){
this.nombre = nombre;
this.apellidos = apellidos;
this.edad = edad;
}

//Getters and Setters
public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getApellidos() {
return apellidos;
}

public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}

public int getEdad() {
return edad;
}

public void setEdad(int edad) {
this.edad = edad;
}

/**
* Método toString sobreescrito
*/
public String toString() {
return "Persona [nombre=" + nombre + ", apellidos=" + apellidos + ", edad=" + edad + "]";
}
}


Clase abstracta Legislador que herada de Persona

Código: [Seleccionar]
package aplicacion;

/**
 * Clase abstracta Legislador que extiende de la clase Persona
 * @author David
 *
 */
public abstract class Legislador extends Persona{

private String provinciaQueRepresenta;

//Constructores
public Legislador(String nombre, String apellidos, int edad){
super(nombre,apellidos,edad);
}

public Legislador(String nombre, String apellidos, int edad,String provinciaQueRepresenta){
super(nombre,apellidos,edad);
this.provinciaQueRepresenta = provinciaQueRepresenta;
}

//Getters and Setters
public String getProvinciaQueRepresenta() {
return provinciaQueRepresenta;
}

public void setProvinciaQueRepresenta(String provinciaQueRepresenta) {
this.provinciaQueRepresenta = provinciaQueRepresenta;
}

abstract public String getCamaraEnQueTrabaja();

/**
* Método toString sobreescrito
*/
public String toString() {
return "Legislador [provinciaQueRepresenta=" + provinciaQueRepresenta + "]";
}
}


Subclase Diputado que hereda de la clase abstracta Legislador

Código: [Seleccionar]
package aplicacion;

public class Diputado extends Legislador{

//Constructores
public Diputado(String nombre, String apellidos,int edad){
super(nombre,apellidos,edad);
}

public Diputado(String nombre, String apellidos, int edad,String provinciaQueRepresenta){
super(nombre,apellidos,edad,provinciaQueRepresenta);
}

/**
* Método heredado
*/
public String getCamaraEnQueTrabaja(){
return "Cámara de diputados";
}

/**
* Método toString sobreescrito
*/
public String toString(){
return super.toString();
}
}


Subclase Senador que hereda de la clase abstracta Legislador

Código: [Seleccionar]
package aplicacion;

public class Senador extends Legislador{

//Constructores
public Senador(String nombre, String apellidos,int edad){
super(nombre,apellidos,edad);
}

public Senador(String nombre, String apellidos, int edad, String provinciaQueRepresenta){
super(nombre,apellidos,edad,provinciaQueRepresenta);
}

/**
* Método heredado
*/
public String getCamaraEnQueTrabaja() {
return "Cámara del senado";
}


/**
* Método toString sobreescrito
*/
public String toString(){
return super.toString();
}

}


Ejecución del programa

Citar
Listado de legisladores:
Camara en la que trabaja: Cámara de diputados
Datos del legislador: Legislador [provinciaQueRepresenta=null]

Camara en la que trabaja: Cámara de diputados
Datos del legislador: Legislador [provinciaQueRepresenta=Madrid]

Camara en la que trabaja: Cámara del senado
Datos del legislador: Legislador [provinciaQueRepresenta=null]

Camara en la que trabaja: Cámara del senado
Datos del legislador: Legislador [provinciaQueRepresenta=Sevilla]


Saludos  :D
« Última modificación: 17 de Junio 2017, 18:02 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola dferna el ejercicio está bien resuelto

Para hacer uso del polimorfismo, podríamos hacer que el tipo estático de todos los objetos fuera el tipo abstracto Legislador. Es decir, en lugar de

Código: [Seleccionar]
Diputado diputado1 = new Diputado("Pablo", "Iglesias", 38);
Diputado diputado2 = new Diputado("Iñigo", "Errejon", 34, "Madrid");
Senador senador1 = new Senador("Pedro", "Sanchez", 40);
Senador senador2 = new Senador("Antonio", "Morales", 45, "Sevilla");
[code]

escribiríamos esto otro

[code]
ArrayList<Legislador> legisladores = new ArrayList<Legislador>();
Legislador diputado1 = new Diputado("Pablo", "Iglesias", 38);
Legislador diputado2 = new Diputado("Iñigo", "Errejon", 34, "Madrid");
Legislador senador1 = new Senador("Pedro", "Sanchez", 40);
Legislador senador2 = new Senador("Antonio", "Morales", 45, "Sevilla");

Otra mejora que podría hacerse es evitar que se muestre por pantalla [provinciaQueRepresenta=null] cuando se trate de un senador

Saludos

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".