Tabla de Contenidos

Herencia: Interface Comparable

Cuando una clase implementa una interface, obliga a sobrescribir los métodos de esa interface. En Java tenemos muchas interfaces para hacer que nuestras clases tengan una forma común. La interfaz Comparable nos servirá para poder ordenar colecciones de objetos de tipo List<> (Arrays, ArrayLists, LinkedLists, etc.)

Interface Comparable

La interface Comparable se usa para obligar a las clases que la implementan a definir sus métodos, de cara a poder ser ordenados. Esta interface solo tiene un método: compareTo(), el cual hemos usado en ocasiones anteriores en objetos de otras clases.

https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html

Cuando una clase implementa la interface Comparable, es posible ordenar mediante los métodos de las clases de Java, Arrays o colecciones de tipo list, por poner ejemplos.

Método compareTo()

El método compareTo() se usa para saber si un objeto tiene un orden natural mayor o menor que el objeto actual (desde el que se llama al método):

La interfaz Comparable es implementada por una clase según la siguiente definición:

public class Coche implements Comparable<Coche>{public int compareTo(Coche o){}
}

Así indicamos que vamos a implementar la interface Comparable en la clase Coche, para el parámetro de tipo Coche.

Criterios de órden

A continuación, debemos plantearnos qué criterios seguiremos para indicar que un Coche sea mayor que otro dentro de un orden natural. Este criterio atenderá al valor de alguno de sus atributos.

Por ejemplo, podemos definir que un coche con un LocalDate fechaMatriculación mayor que otro, es un coche mayor. O que un coche con un String matrícula menor que otra será un objeto menor, o el nº de km, etc.

Una vez tengamos seleccionado el atributo/s que indicará quien es mayor, debemos implementar el método compareTo() a partir de la comparación de esos atributos. Si el atributo es una referencia a un objeto, podemos usar el método compareTo() de esa clase de objetos, si lo tienen implementado. En el caso de los Strings, ya tienen implementado la interface Comparable, y tienen su propio método compareTo(). Esto mismo ocurrirá con distintos objetos de clases de la API de Java. Si queremos que nuestros objetos sean ordenables deben implementar esta interface.

Ejemplos de implementación del método compareTo():

//Atendiendo a su numero de km int
public int compareTo(Coche otro){
	return this.km – otro.km;	//Resto los km y tendré 0, >0 ó <0
}
//Atendiendo a su fecha de matriculación LocalDate
public int compareTo(Coche otro){
	return fechaMatriculacion.compareTo(otro.fechaMatriculacion);
	// Devuelvo lo que devuelve el método compareTo() de LocalDate
}
//Atendiendo a su matricula String
public int compareTo(Coche otro){
	return matricula.compareTo(otro.matricula);
	// Devuelvo lo que devuelve el método compareTo() de String
}

Reglas de implementación

Además, tal y como se comenta en la API sobre la interface Comparable se debe atender a una serie de reglas:


© 2025 Fernando Valdeón