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,staticifinal. - 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
Vehicleamb els mètodesstartEngineistopEngine. - Crea una classe
Carque implementi la interfícieVehiclei proporcioni implementacions per als mètodesstartEngineistopEngine.
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
honka la interfícieVehicleque imprimeixi "The vehicle is honking". - Crea una classe
Bikeque implementi la interfícieVehiclei 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
