Polimorfismo
●Característica por la cual, objetos
de diferentes clases pueden responder de manera diferente al mismo mensaje.
●En la práctica, es la posibilidad de
que varias clases (en jerarquía) puedan tener métodos con el mismo nombre y el
objeto que recibe el mensaje actúe según su propio método.
●El polimorfismo se implementa a
través de reemplazo y/o refinamiento.
Polimorfismo con colecciones
Ejercicio 1
Cree un proyecto nuevo de nombre P01E01. Cree
un paquete nuevo de nombre vehículos. Diseñe una clase de nombre Vehículo con
los siguientes atributos privados: placa (cadena), marca (cadena), pasajeros
(entero), precio (real).
Implemente el constructor y todos los métodos
accesores(get,set) de los atributos de la clase. Considere un método abstracto
de nombre clase() que retorne el nombre de la clase.
Considere un método no abstracto de nombre
info() que retorne la información de un vehículo separando sus campos por un
tabulador.
Diseñe otra clase de nombre Automovil que
herede a la clase Vehiculo con los siguientes atributos: implemente
Implemente el constructor y todos los métodos
accesores(get,set) de los atributos de la clase. Desarrolle el método abstracto
clase() para que retorne el nombre de la clase.
Desarrolle el
método no abstracto info() aplicando refinamiento para que considere sus
propios atributos adicionales a la información del vehículo.
Diseñe otra
clase de nombre Camión que herede la clase Vehículo con los siguientes
atributos:
Implemente el
constructor y todos los métodos accesores(get,set) de los atributos de la
clase.
Desarrolle el método abstracto clase()
para que retorne el nombre de la clase.
Desarrolle el método no abstracto info()
aplicando refinamiento para que considere sus propios atributos adicionales a
la información del vehículo.
Diseñe otra clase de nombre ColeccionVehiculos
que tenga como atributo un objeto de la clase ArrayList e implemente
los métodos de administración.
Diseñe otra clase de nombre PanelPrincipal
que tenga una vista similar a la siguiente:
Programe la acción de
los botones, Diseñe la clase Principal y ejecute su aplicación.
Solución:
Primero
crearemos un paquete de nombre vehículos. Luego haremos las clases
correspondientes y después hacemos el diseño del panel, programando los botones
para ejecutar su aplicación.
package
Vehiculos;
public
abstract class Vehiculo {
// atributos
private String
placa;
private String
marca;
private int
pasajeros;
private double
precio;
// constructor
public Vehiculo(String placa,String marca,int
pasajeros,double precio){
this.placa=placa;
this.marca=marca;
this.pasajeros=pasajeros;
this.precio=precio; }
public abstract String clase(); // clase
abstracta
public String info(){ //
clase no abstracta
return
"clase\n:"+clase()+"clase\n:"+getPlaca()+"clase\n:"+getMarca()+"clase\n:"+getPasajeros()+"clase\n:"+getPrecio();
}
// métodos
get-set
public
String getPlaca() {
return
placa; }
public
void setPlaca(String placa) {
this.placa = placa; }
public String
getMarca() {
return
marca; }
public void
setMarca(String marca) {
this.marca = marca; }
public
int getPasajeros() {
return pasajeros; }
public void setPasajeros(int pasajeros) {
this.pasajeros = pasajeros; }
public double getPrecio() {
return precio; }
public void setPrecio(double precio) {
this.precio = precio;
}
}
// Fin de la clase Vehiculo
package Vehiculos;
public class Automovil extends
Vehiculo {
//
atributos
private boolean maletera;
private double capacidad;
// constructor
public Automovil(String placa,String
marca,int pasajeros,double precio,boolean maletera,double capacidad){
super(placa,marca,pasajeros,precio);
this.maletera=maletera;
this.capacidad=capacidad;
}
public
String clase(){
return "Automovil"; }
public String info(){ // clase no abstracta
return
super.info()+"clase\n:"+isMaletera()+"clase\n:"+getCapacidad(); }
// metodos get - set
public
boolean isMaletera() {
return
maletera; }
public void
setMaletera(boolean maletera) {
this.maletera
= maletera; }
public double getCapacidad() {
return capacidad; }
public void setCapacidad(double capacidad)
{
this.capacidad = capacidad;
}
} Fin de la clase Automovil.
package
Vehiculos;
public class
Camion extends Vehiculo {
// atributos
private
boolean tolva;
private
double carga;
// constructor
public Camion(String placa,String marca,int
pasajeros,double precio,boolean tolva,double carga){
super(placa,marca,pasajeros,precio);
this.tolva=tolva;
this.carga=carga; }
public String clase(){
return
"Camion"; }
public String info(){ // clase no abstracta
return
super.info()+"clase\n:"+isTolva()+"clase\n:"+getCarga(); }
// métodos get
- set
public
boolean isTolva() {
return
tolva; }
public void
setTolva(boolean tolva) {
this.tolva = tolva; }
public double
getCarga() {
return
carga; }
public void
setCarga(double carga) {
this.carga = carga;
}
} Fin de la clase Camion
package Vehiculos;
import
java.util.ArrayList;
public class ColeccionVehiculos {
// atributos
protected ArrayList<Vehiculo> a;
// constructutor
public ColeccionVehiculos(){
a=new ArrayList<Vehiculo>(); }
public int getN(){
return
a.size();}
public void
agrega(Vehiculo v){
a.add(v);}
public
Vehiculo getVehiculo(int i){
return
a.get(i);}
public
Vehiculo getVehiculo(){
return
a.get(0);}
public
Vehiculo busca(String placa){
for(int i=0;i<getN();i++){
if(getVehiculo(i).getPlaca().equals(placa))
return getVehiculo(i);
}
return null;}
public void
elimina(int i){
a.remove(i);}
public void
elimina(Vehiculo v){
a.remove(v);}
public void
elimina(String placa){
if(busca(placa)!=null)
a.remove(placa); }
} // Fin de la clase Colección vehículos
Panel
Contenido del Frame
package Vehiculos;
public class
Principal extends javax.swing.JFrame {
public
Principal() {
initComponents();
add(new
PanelPrincipal());
setSize(600,400);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Principal().setVisible(true);
}
});
}
}









0 comentarios:
Publicar un comentario