Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: dferna en 15 de Abril 2017, 11:47
-
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
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
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
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
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
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
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
-
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
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