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
ifinal
. - 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:
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
- Defineix una interfície anomenada
Vehicle
amb els mètodesstartEngine
istopEngine
. - Crea una classe
Car
que implementi la interfícieVehicle
i proporcioni implementacions per als mètodesstartEngine
istopEngine
.
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
- Afegeix un mètode per defecte anomenat
honk
a la interfícieVehicle
que imprimeixi "The vehicle is honking". - Crea una classe
Bike
que implementi la interfícieVehicle
i utilitzi el mètode per defectehonk
.
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
- Introducció a Java
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
- Operadors
Mòdul 2: Flux de Control
Mòdul 3: Programació Orientada a Objectes
- Introducció a la POO
- Classes i Objectes
- Mètodes
- Constructors
- Herència
- Polimorfisme
- Encapsulació
- Abstracció
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
- Lectura de Fitxers
- Escriptura de Fitxers
- Fluxos de Fitxers
- BufferedReader i BufferedWriter
- Serialització
Mòdul 8: Multithreading i Concurrència
- Introducció al Multithreading
- Creació de Fils
- Cicle de Vida dels Fils
- Sincronització
- Utilitats de Concurrència
Mòdul 9: Xarxes
- Introducció a les Xarxes
- Sockets
- ServerSocket
- DatagramSocket i DatagramPacket
- URL i HttpURLConnection