Les interfícies són una part fonamental de la programació orientada a objectes en Java. Permeten definir un contracte que les classes poden implementar, assegurant que aquestes classes proporcionin implementacions específiques dels mètodes definits a la interfície. En aquest tema, explorarem què són les interfícies, com es defineixen i com s'utilitzen en Java.

Què és una Interfície?

Una interfície en Java és una col·lecció de mètodes abstractes (mètodes sense implementació) i constants. Les interfícies no poden tenir codi executable, només les signatures dels mètodes. Les classes que implementen una interfície han de proporcionar implementacions concretes per a tots els mètodes de la interfície.

Característiques de les Interfícies

  • Mètodes Abstractes: Tots els mètodes d'una interfície són abstractes per defecte.
  • Constants: Les interfícies poden contenir constants, que són implícitament public, static i final.
  • Herència Múltiple: Una classe pot implementar múltiples interfícies, permetent una forma d'herència múltiple.
  • Default Methods: A partir de Java 8, les interfícies poden tenir mètodes per defecte amb implementació.

Definició d'una Interfície

Per definir una interfície, utilitzem la paraula clau interface. Aquí teniu un exemple bàsic:

public interface Animal {
    void eat();
    void sleep();
}

En aquest exemple, Animal és una interfície amb dos mètodes abstractes: eat i sleep.

Implementació d'una Interfície

Una classe que implementa una interfície ha de proporcionar implementacions per a tots els mètodes de la interfície. Utilitzem la paraula clau implements per indicar que una classe implementa una interfície.

public class Dog implements Animal {
    @Override
    public void eat() {
        System.out.println("The dog is eating.");
    }

    @Override
    public void sleep() {
        System.out.println("The dog is sleeping.");
    }
}

En aquest exemple, la classe Dog implementa la interfície Animal i proporciona implementacions per als mètodes eat i sleep.

Mètodes per Defecte

A partir de Java 8, les interfícies poden tenir mètodes per defecte amb implementació. Això permet afegir nous mètodes a les interfícies sense trencar les classes existents que les implementen.

public interface Animal {
    void eat();
    void sleep();

    default void makeSound() {
        System.out.println("This animal makes a sound.");
    }
}

Les classes que implementen aquesta interfície poden utilitzar el mètode per defecte o sobreescriure'l.

Interfícies i Herència Múltiple

Una classe pot implementar múltiples interfícies, permetent una forma d'herència múltiple.

public interface Animal {
    void eat();
    void sleep();
}

public interface Pet {
    void play();
}

public class Dog implements Animal, Pet {
    @Override
    public void eat() {
        System.out.println("The dog is eating.");
    }

    @Override
    public void sleep() {
        System.out.println("The dog is sleeping.");
    }

    @Override
    public void play() {
        System.out.println("The dog is playing.");
    }
}

En aquest exemple, la classe Dog implementa tant la interfície Animal com la interfície Pet.

Exercicis Pràctics

Exercici 1: Definir i Implementar una Interfície

  1. Defineix una interfície anomenada Vehicle amb els mètodes startEngine i stopEngine.
  2. Crea una classe Car que implementi la interfície Vehicle i proporcioni implementacions per als mètodes startEngine i stopEngine.

Solució

public interface Vehicle {
    void startEngine();
    void stopEngine();
}

public class Car implements Vehicle {
    @Override
    public void startEngine() {
        System.out.println("The car engine is starting.");
    }

    @Override
    public void stopEngine() {
        System.out.println("The car engine is stopping.");
    }
}

Exercici 2: Utilitzar Mètodes per Defecte

  1. Afegeix un mètode per defecte anomenat honk a la interfície Vehicle que imprimeixi "The vehicle is honking".
  2. Crea una classe Bike que implementi la interfície Vehicle i utilitzi el mètode per defecte honk.

Solució

public interface Vehicle {
    void startEngine();
    void stopEngine();

    default void honk() {
        System.out.println("The vehicle is honking.");
    }
}

public class Bike implements Vehicle {
    @Override
    public void startEngine() {
        System.out.println("The bike engine is starting.");
    }

    @Override
    public void stopEngine() {
        System.out.println("The bike engine is stopping.");
    }
}

Resum

En aquest tema, hem après què són les interfícies en Java, com es defineixen i com es poden implementar en les classes. També hem explorat els mètodes per defecte introduïts en Java 8 i com les interfícies permeten una forma d'herència múltiple. Les interfícies són una eina poderosa per definir contractes en el codi i assegurar que les classes proporcionin implementacions específiques dels mètodes definits.

Curs de Programació en Java

Mòdul 1: Introducció a Java

Mòdul 2: Flux de Control

Mòdul 3: Programació Orientada a Objectes

Mòdul 4: Programació Orientada a Objectes Avançada

Mòdul 5: Estructures de Dades i Col·leccions

Mòdul 6: Gestió d'Excepcions

Mòdul 7: Entrada/Sortida de Fitxers

Mòdul 8: Multithreading i Concurrència

Mòdul 9: Xarxes

Mòdul 10: Temes Avançats

Mòdul 11: Frameworks i Llibreries de Java

Mòdul 12: Construcció d'Aplicacions del Món Real

© Copyright 2024. Tots els drets reservats