import java.util.Arrays;
public class OrdenarArrayObjetos {
public static void main(String[] args) {
// definimos una variable que contendra clases que hereden del tipo "Animal"
Animal [] misAnimales = new Animal[4];
// instanciamos la clase perro y gato pasando como parametro el nombre y edad
misAnimales[0]=new Perro("boby",3);
misAnimales[1]=new Gato("blanquito",7);
misAnimales[2]=new Gato("skip",5);
misAnimales[3]=new Gato("peluche",9);
// Ordenamos el array de objectos.
// Para poder ordenanar un array de objectos, hay que implementar la interfaz
// "Comparable" en la clase que hay que ordenar
Arrays.sort(misAnimales);
for(Animal e:misAnimales) {
// ejecutara la función tipoAnimal() de la clase que haya sido instanciada.
// Esto se llama polimorfismo
System.out.println(e.tipoAnimal());
}
}
}
// Clase abstracta porque contiene una o mas definiciones de metodos abstractos
// Implemente la interface Comparable que hay que utilizar para ordenar un array
// de objetos
abstract class Animal implements Comparable {
// Variable que contendra el nombre del animal
private String name;
// Variable que contendra la edad del animal
private int edad;
// setter para definir el nombre del animal
public void setName(String name) {
this.name=name;
}
// getter para obtener el nombre del animal
public String getName() {
return this.name;
}
// setter para definir la edad del animal
public void setEdad(int edad) {
this.edad=edad;
}
// getter para obtener la edad del animal
public int getEdad() {
return this.edad;
}
// Definiemos una clase abstracta
// Creas un patron de diseño que tienes que seguir obligatoriamente
// en tu jerarquia de herencia
public abstract String tipoAnimal();
// Sobrescribimos el metodo "compareTo" de la interfaz "Comparable"
// que recibira un objecto
public int compareTo(Object obj){
// Refundición del objeto recibido al objeto "Animal"
Animal AnimalTemporal=(Animal) obj;
// Comparamos las edades devolviendo -1 si es menos, 1 si es mayor
// o 0 si son iguales
if(this.edad<AnimalTemporal.getEdad())
return -1;
else if(this.edad>AnimalTemporal.getEdad())
return 1;
return 0;
}
}
class Perro extends Animal {
public Perro(String name, int edad) {
super.setName(name);
super.setEdad(edad);
}
// Estamos obligados a crear este metodo, ya que heredamos de Animal
// que es una clase abstracta, por lo que hay que definir todos los
// metodos abstractos que tenga
public String tipoAnimal() {
return "El animal es un perro. Se llama " + super.getName() + " y tiene " + super.getEdad() + " años";
}
}
class Gato extends Animal {
public Gato(String name, int edad) {
super.setName(name);
super.setEdad(edad);
}
// Estamos obligados a crear este metodo, ya que heredamos de Animal
// que es una clase abstracta, por lo que hay que definir todos los
// metodos abstractos que tenga
public String tipoAnimal() {
return "El animal es un gato. Se llama " + super.getName() + " y tiene " + super.getEdad() + " años";
}
}
Comentarios sobre la versión: Versión 1 (0)
No hay comentarios