He aquí una solución al ejercicio CU00695B del tutorial de programador Java desde cero para su revisión. Gracias
Declara una clase abstracta Legislador que herede de la clase Persona2, 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
package persona2;
/**
*
* @author ITCO1724
*/
public class Persona2 { //Código de la clase Persona1
private String nombre;
private String apellidos;
private int edad;
public Persona2() {
nombre = "";
apellidos = "";
edad = 0;
}
public Persona2 (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; // transformamos edad en un Integer para poder aplicarle el método toString()
return "-Nombre: ".concat(nombre).concat(" -Apellidos: ").concat(apellidos).concat(" -Edad: ").concat(datoEdad.toString() ); }
} //Cierre de la clase
package persona2;
/**
*
* @author ITCO1724
*/
public abstract class Legislador extends Persona2 {
private String IdLegislador;
private String provinciaQueRepresenta;
String CamaraEnQueTrabaja;
// Constructores
public Legislador () {
super();
IdLegislador = "Unknown"; }
public Legislador (String nombre, String apellidos, int edad, String id) {
super(nombre, apellidos, edad);
IdLegislador = id;
} //Cierre del constructor
// Métodos
public void setIdLegislador (String IdLegislador) { this.IdLegislador = IdLegislador; }
public String getIdLegislador () { return IdLegislador; }
public void setprovinciaQueRepresenta (String provinciaQueRepresenta) { this.provinciaQueRepresenta = provinciaQueRepresenta; }
public String getprovinciaQueRepresenta () { return provinciaQueRepresenta; }
//public void setCamaraEnQueTrabaja (String CamaraEnQueTrabaja) { this.CamaraEnQueTrabaja = CamaraEnQueTrabaja; }
public abstract String getCamaraEnQueTrabaja (); //Método abstracto de la clase padre obligatorio especializar en las clases hijas Senador y Diputado
public void mostrarDatos() {
System.out.println ("Legislador de nombre: " + getNombre() + " " +
getApellidos() + " con No. de identificación: " + getIdLegislador() ); }
public String toString () { return super.toString().concat(" -IdLegislador: ").concat(IdLegislador);
}
abstract public float importeNomina (); // Método abstracto
} //Cierre de la clase
package persona2;
/**
*
* @author ITCO1724
*/
import java.util.Calendar;
public class Diputado extends Legislador {
// Campo de la clase ejemplo aprenderaprogramar.com
private Calendar fechaNombramiento;
// Constructores
public Diputado (Calendar fechaInicio) {
super(); fechaNombramiento = fechaInicio; }
public Diputado (String nombre, String apellidos, int edad, String id, Calendar fechaInicio) {
super(nombre, apellidos, edad, id);
fechaNombramiento = fechaInicio; }
public Calendar getFechaNombramiento () { return fechaNombramiento; } //Método
public String toString () { // Sobreescritura del método
return super.toString().concat (" Fecha nombramiento: ").concat (fechaNombramiento.getTime().toString()); }
public float importeNomina () { return 120f * 10.5f ; } //Método abstracto sobreescrito en esta clase
public String getCamaraEnQueTrabaja (){ return CamaraEnQueTrabaja;} //Método abstracto especializado de la clase hija senador
} //Cierre de la clase
package persona2;
import java.util.Calendar;
/**
*
* @author ITCO1724
*/
public class Senador extends Legislador {
private Calendar fechaNombramiento;
private Calendar fechaInicio;
public Senador (Calendar fechaInicio) {
super(); fechaNombramiento = fechaInicio; }
public Senador(String nombre, String apellidos, int edad, String id, Calendar fechaInicio) {
super(nombre, apellidos, edad, id);
fechaNombramiento = fechaInicio;
}
public float importeNomina () { return 150f * 12.2f; } //Método abstracto sobreescrito en esta clase
public String getCamaraEnQueTrabaja (){ return CamaraEnQueTrabaja;} //Método abstracto especializado de la clase hija senador
} //Cierre de la clase
import java.util.ArrayList;
import java.util.Iterator;
public class ListaLegisladores {
private ArrayList <Legislador> listaLegisladores; //Campo de la clase
public ListaLegisladores () { listaLegisladores = new ArrayList <Legislador> (); } //Constructor
public void addLegislador (Legislador legislador) { listaLegisladores.add(legislador); } //Método
public void imprimirLista() { //Método
String tmpStr1 = ""; //String temporal que usamos como auxiliar
String tmpStr2 = "";
String tmpStr3 = "";
System.out.println ("PROCEDEMOS A MOSTRAR LA LISTA DE CONGRESISTAS ADSCRITOS\n");
for (Legislador tmp: listaLegisladores) {
System.out.println (tmp.toString () );
if (tmp instanceof Diputado) { tmpStr1 = "Diputado";tmpStr2 = "Camara de Representantes";tmpStr3 = "ANTIOQUIA";} else { tmpStr1 = "Diputado"; tmpStr2 = "Senado de la Republica";tmpStr3 = "VALLE"; }
System.out.println("-CARGO DESEMPEÑADO:"+tmpStr1+" -SALARIO DEVENGADO : "+(tmp.importeNomina())+"-SEDE DE TRABAJO :"+tmpStr2 +" Representante de :"+tmpStr3+ "\n");}
} //Cierre método imprimirLista
public float importeTotalNominaLegislador() {
float importeTotal = 0f; //Variable temporal que usamos como auxiliar
Iterator<Legislador> it = listaLegisladores.iterator();
while (it.hasNext() ) { importeTotal = importeTotal + it.next().importeNomina(); }
return importeTotal;
} //Cierre del método importeTotal
} //Cierre de la clase
package persona2;
import java.util.Calendar;
/**
*
* @author ITCO1724
*/
public class TestAbstract {
public static void main (String [ ] Args) {
Calendar fecha1 = Calendar.getInstance();
fecha1.set(2017,12,20); //Los meses van de 0 a 11, luego 10 representa noviembre
//Lista de Legisladores
Diputado pi1 = new Diputado("Julio", "Medina Florez", 45, "70080403", fecha1);
Diputado pi2 = new Diputado("Manuel", "Murillo Toro", 87, "72332634", fecha1);
Diputado pi3 = new Diputado("Abigail", "Ríos Mesa", 76, "63897521", fecha1);
Senador pt1 = new Senador ("Andres", "Rios Gutierrez", 23, "45897236",fecha1 );
Senador pt2 = new Senador ("Carepapa", "Centeno Cifuentes", 49, "36578924",fecha1);
Senador pt3 = new Senador ("Roy", "Molino Viejo", 49, "1478952",fecha1);
ListaLegisladores listaLegisladores = new ListaLegisladores ();
listaLegisladores.addLegislador (pi1);
listaLegisladores.addLegislador(pi2);
listaLegisladores.addLegislador (pi3);
listaLegisladores.addLegislador (pt1);
listaLegisladores.addLegislador(pt2);
listaLegisladores.addLegislador (pt3);
listaLegisladores.imprimirLista();
System.out.println ("EL TOTAL DE LA NÓMINA DE LOS CONGRESISTAS ES " +
listaLegisladores.importeTotalNominaLegislador()+ " Dolares");
} } //Cierre del main y cierre de la clase