Clases Concretas en Java

Clases Concretas en Java

1. Introducción

En esta guía rápida, discutiremos el término "clase concreta" en Java.

Primero, definiremos el término. Luego, veremos cómo difiere de las interfaces y las clases abstractas.

2. ¿Qué es una Clase Concreta?

Una clase concreta es una clase de la cual podemos crear una instancia utilizando la palabra clave new.

En otras palabras, es una implementación completa de su plantilla. Una clase concreta está completa.

Imagina, por ejemplo, una clase Coche:

public class Coche {
    public String pitar() {
        return "¡beep!";
    }

    public String conducir() {
        return "vroom";
    }
}

Dado que todos sus métodos están implementados, la llamamos una clase concreta y podemos instanciarla:

Coche coche = new Coche();

Algunos ejemplos de clases concretas en el JDK son HashMap, HashSet, ArrayList y LinkedList.

3. Abstracción en Java vs. Clases Concretas

Sin embargo, no todos los tipos en Java implementan todos sus métodos. Esta flexibilidad, también llamada abstracción, nos permite pensar en términos más generales sobre el dominio que estamos tratando de modelar.

En Java, podemos lograr la abstracción utilizando interfaces y clases abstractas.

Echemos un vistazo más detenido a las clases concretas comparándolas con estas otras.

3.1. Interfaces

Una interfaz es una plantilla para una clase. O, en otras palabras, es una colección de firmas de métodos no implementados:

interface Conducible {
    void pitar();
    void conducir();
}

Nota que utiliza la palabra clave interface en lugar de class.

Dado que Conducible tiene métodos no implementados, no podemos crear una instancia de ella con la palabra clave new.

Pero, las clases concretas como Coche pueden implementar estos métodos.

El JDK proporciona una serie de interfaces como Map, List y Set.

3.2. Clases Abstractas

Una clase abstracta es una clase que tiene métodos no implementados, aunque puede tener ambos:

public abstract class Vehiculo {
    public abstract String pitar();

    public String conducir() {
        return "zoom";
    }
}

Nota que marcamos las clases abstractas con la palabra clave abstract.

Nuevamente, dado que Vehiculo tiene un método no implementado, pitar, no podremos usar la palabra clave new.

Algunos ejemplos de clases abstractas en el JDK son AbstractMap y AbstractList.

3.3. Clases Concretas

En contraste, las clases concretas no tienen métodos no implementados. Ya sea que las implementaciones se hereden o no, mientras cada método tenga una implementación, la clase es concreta.

Las clases concretas pueden ser tan simples como nuestro ejemplo de Coche anterior. También pueden implementar interfaces y extender clases abstractas:

public class CocheElegante extends Vehiculo implements Conducible {
    public String pitar() { 
        return "beep";
    }
}

La clase CocheElegante proporciona una implementación para pitar y hereda la implementación de conducir de Vehiculo.

Como tal, no tiene métodos no implementados. Por lo tanto, podemos crear una instancia de la clase CocheElegante con la palabra clave new.

CocheElegante coche = new CocheElegante();

O, dicho de manera simple, todas las clases que no son abstractas, las llamamos clases concretas.

4. Resumen

En este breve tutorial, aprendimos acerca de las clases concretas y sus especificaciones.

Además, mostramos las diferencias entre interfaces y clases concretas y abstractas.