Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: pedro,, en 26 de Julio 2015, 17:17

Título: Ejemplo clases y Métodos abstractos en Java Ejercicio resuelto CU00695B
Publicado por: pedro,, en 26 de Julio 2015, 17:17
Hola, os dejo mi resolución de este ejercicio.

Citar
Declara una clase abstracta Legislador que herede de la clase Persona, con un atributo provinciaQueRepresenta (tipo String) y otros atributos. Declara un método abstracto getCamaraEnQueTrabaja. Crea dos clases concretas que hereden de Legislador: la clase Diputado y la clase Senador que sobreescriban los métodos abstractos necesarios. Crea una lista de legisladores y muestra por pantalla la cámara en que trabajan haciendo uso del polimorfismo.

Clase Persona
Código: [Seleccionar]
public class Persona {
    private String nombre; private String apellidos; private int edad;
    public Persona() {
        nombre = "";
        apellidos = "";
        edad = 0;
    }
    public Persona (String nombre, String apellidos, int edad) {
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.edad = edad;
    }
    public String getNombre() { return nombre; }
    public String getApellidos() { return apellidos; }
    public int getEdad() { return edad; }
    public String toString() {
        Integer datoEdad = edad;
        return "---------\nNombre: ".concat(nombre).concat("\nApellidos: ").concat(apellidos).concat("\nEdad: ").concat(datoEdad.toString() );
    } 
}

Clase abstracta Legislador
Código: [Seleccionar]
public abstract class Legislador extends Persona{
    private String provinciaQueRepresenta;
    private String dni;
    public Legislador(){
        super();
        provinciaQueRepresenta = "";
        dni = "";
    }
    public Legislador(String nombre, String apellidos, int edad, String provinciaQueRepresenta, String dni){
        super(nombre, apellidos, edad);
        this.provinciaQueRepresenta = provinciaQueRepresenta;
        this.dni = dni;
    }
    public void setProvinciaQueRepresenta(String provinciaQueRepresenta){ this.provinciaQueRepresenta = provinciaQueRepresenta; }
    public void setDni(String dni){ this.dni = dni; }
    public String getProvinciaQueRepresenta(){ return provinciaQueRepresenta; }
    public String getDni(){ return dni; }
    public String toString(){
        return super.toString().concat("\nProvincia que representa: ").concat(provinciaQueRepresenta).concat("\nDni: ".concat(dni));
    }
    abstract public String getCamaraEnQueTrabaja();
}

Clase Diputado
Código: [Seleccionar]
public class Diputado extends Legislador{
    private int numDiputado;
    public Diputado(){
        super();
        numDiputado = 0;
    }
    public Diputado(String nombre, String apellidos, int edad, String provinciaQueRepresenta, String dni, int numDiputado){
        super(nombre, apellidos, edad, provinciaQueRepresenta, dni);
        this.numDiputado = numDiputado;
    }
    public void setNumeroDiputado (int numCongresista){ this.numDiputado = numDiputado; }
    public int getNumDiputado(){ return numDiputado; }
    public String getCamaraEnQueTrabaja(){
        return ("Congreso");
    }
    public String toString(){
        Integer datoNumDiputado = numDiputado;
        return super.toString().concat("\nNumero de Diputado: ").concat(datoNumDiputado.toString());
    }
}

Clase Senador
Código: [Seleccionar]
public class Senador extends Legislador{
    private int numCongresista;
    public Senador(){
        super();
        numCongresista = 0;
    }
    public Senador(String nombre, String apellidos, int edad, String provinciaQueRepresenta, String dni, int numCongresista){
        super(nombre, apellidos, edad, provinciaQueRepresenta, dni);
        this.numCongresista = numCongresista;
    }
    public void setNumCongresista(int numCongresista){ this.numCongresista = numCongresista; }
    public int getNumCongresista(){ return numCongresista; }
    public String getCamaraEnQueTrabaja(){
        return ("Senado");
    }
    public String toString(){
        Integer datoNumCongresista = numCongresista;
        return super.toString().concat("\nNumero de congresista: ").concat(datoNumCongresista.toString());
    }
}

Clase ListaLegisladores
Código: [Seleccionar]
import java.util.ArrayList;
public class ListaLegisladores{
    private ArrayList <Legislador> listaLegisladores;
    public ListaLegisladores(){
        listaLegisladores = new ArrayList <Legislador>();
    }
    public void addLegislador (Legislador legislador){
        listaLegisladores.add(legislador);
    }
    public void muestraListaLegisladores(){
        String tmpStr1 = "";
        System.out.println ("Legisladores que hay en la lista.\n");
        for (Legislador tmp: listaLegisladores){
            System.out.println (tmp.toString());
            if (tmp instanceof Diputado){
                tmpStr1 = "Diputado";
            } else {
                tmpStr1 = "Congresista";
            }
            System.out.println("El legislador es: " + tmpStr1 + "\nPertenece a la cámara del " + tmp.getCamaraEnQueTrabaja());
        }
    }
}

Clase TestAbstract2
Código: [Seleccionar]
public class TestAbstract2{
    public static void main(String [] Args){
        Diputado dipu1 = new Diputado("José", "Hernández López", 45, "Madrid", "7894561-S", 78954);
        Diputado dipu2 = new Diputado("Andrés", "Moltó Parra", 46, "Valencia", "2547889-S", 48564);
        Diputado dipu3 = new Diputado("José", "Ríos Mesa", 76, "Sevilla", "98783-S", 78995);
        Senador sen1 = new Senador("Juan", "Pérez Pérez", 23, "Ourense", "4568795-S", 125657);
        Senador sen2 = new Senador("Alberto", "Centa Mota", 49, "Malaga", "4567894-S", 35487);
        Senador sen3 = new Senador("Alberto", "Centa Mota", 49, "Murcia", "4578561-S", 78945);
        ListaLegisladores listaLegisladores = new ListaLegisladores();
        listaLegisladores.addLegislador(dipu1);
        listaLegisladores.addLegislador(dipu2);
        listaLegisladores.addLegislador(dipu3);
        listaLegisladores.addLegislador(sen1);
        listaLegisladores.addLegislador(sen2);
        listaLegisladores.addLegislador(sen3);
        listaLegisladores.muestraListaLegisladores();
    }
}

Título: Re:Clases y Métodos abstractos en Java. CU00695B
Publicado por: javi in the sky en 26 de Julio 2015, 22:57
Hola! Después de ver el código yo lo veo todo perfecto

Los tipos estáticos los podrías declarar como Legislador así,

Legislador dipu1 = new Diputado("José", "Hernández López", 45, "Madrid", "7894561-S", 78954);

pero como lo has hecho también está bien

Nos vemos!
Título: Re:Clases y Métodos abstractos en Java. CU00695B
Publicado por: pedro,, en 26 de Julio 2015, 23:01
Tienes razón, en ejercicios anteriores lo hice como dices, no se en que estaría pensando cuando hice este ejercicio.

saludos y gracias por los comentarios.