Lo que voy ha hacer a continuación esta basado en lo que se llama el Patrón DAO:
Primero craeas un interface, esto te va ha permitir ponerlos en "algo" iterable:
public interface Llamadable
{
public String getNumeroOrigen();
public String getNumeroDestino();
public double getDuracion();
public String setNumeroOrigen();
public String setNumeroDestino();
public double setDuracion();
public void imprimirInforme();
public abstract double calcularPrecio();
}
Luego ponemos la clase abstracta (que es una copia de llamada): Donde pones el codigo que pienzas que se va ha repetir.
public abstract class LlamadaGeneral
{
//Atributos
private String numeroOrigen;
private String numeroDestino;
private double duracion;
//Constructor
public Llamada(String param1, String param2, double param3)
{
this.numeroOrigen = param1;
this.numeroDestino = param2;
this.duracion = param3;
}
//Getters
public String getNumeroOrigen()
{
return numeroOrigen;
}
public String getNumeroDestino()
{
return numeroDestino;
}
public double getDuracion()
{
return duracion;
}
public String setNumeroOrigen()
{
return numeroOrigen;
}
public String setNumeroDestino()
{
return numeroDestino;
}
public double setDuracion()
{
return duracion;
}
}
Ahora heredamos pero implementamos a llamable, es decir implementamos lo que realmente vamos a usar.
public class LlamadasLocales extends LlamadaGeneral implements Llamable
{
//Atributos
private double precio;
//Constructores
public LlamadasLocales(String param1, String param2, int param3)
{
super(param1, param2, param3);
this.precio = 0.15;
}
//Getters
public double getPrecio()
{
return precio;
}
//Resto de metodos
public double calcularPrecio()
{
return getDuracion() * precio;
}
public void imprimirInforme()
{
System.out.println("Llamadas locales" + "\nNumero origen: " + getNumeroOrigen() + " Numero destino: " + getNumeroDestino()
+ " Duracion: " + getDuracion() + " Precio: " + getPrecio() + " Total: " + calcularPrecio());
}
}
Lo mismo para las llamadas provinciales
public class LlamadasProvinciales extends LlamadaGeneral implements Llamable
{
//Atributos
private double precio1;
private double precio2;
private double precio3;
private int franja;
//Constructores
public LlamadasProvinciales(String param1, String param2, int param3, int param4)
{
super(param1, param2, param3);
this.precio1 = 0.20;
this.precio2 = 0.25;
this.precio3 = 0.30;
this.franja = 3;
}
//Resto de metodos
public double calcularPrecio()
{
if (franja==1)
{
System.out.println("El precio de la franja1 es: " + getDuracion() * precio1);
return getDuracion() * precio1;
} else
if (franja==2)
{
System.out.println("El precio de la franja2 es: " + getDuracion() * precio2);
return getDuracion() * precio2;
}
else
System.out.println("El precio de la franja3 es: " + getDuracion() * precio3);
return getDuracion() * precio3;
}
public void imprimirInforme()
{
System.out.println("Llamadas provinciales: " + "\nNumero origen: " + getNumeroOrigen() + " Numero destino: " + getNumeroDestino() + " Duracion: " + getDuracion() + franja);
}
}
Ahora no nesitamos la clase centralita. cuando tenemos a la marabillosa lista.
public class Actividad4
{
public static void main(String[] args)
{
List<Llamable> centralita = new ArrayList<Llamable>();
Llamable llamada1 = new LlamadasLocales("912345612", "9555612301", 67);
Llamable llamada2 = new LlamadasLocales("9555612301", "912345612", 23);
Llamable llamada3 = new LlamadasProvinciales("955555", "123444", 12, 2);
Llamable llamada4 = new LlamadasProvinciales("123444", "955555", 23, 1);
centralita.add(llamada1);
centralita.add(llamada2);
centralita.add(llamada3);
centralita.add(llamada4);
System.out.println("La cantidad de llamadas en la centralita es: " + centralita.size() );
double precio= 0.0;
for(Llamable unaLlamada : centralita){
precio += unaLlamada.calcularPrecio();
}
System.out.println("El precio total en las llamadas es: "+precio);
}
}
La clasa list y Arraylist es una java.util.List y java.util.ArrayList.
Todo esto no lo compile.
Habisames si no entendes algo.
Edito:
a la primera clase le faltaba una coma
a la clase LlamadasProvinciales, correji el calcular precio (porque retornava franja)