Les classes anònimes són una característica poderosa de Java que permet crear subclasses d'una classe o implementar interfícies de manera ràpida i concisa. Aquestes classes no tenen un nom explícit i es defineixen i instancien en una sola expressió. Són especialment útils quan es necessita una classe que s'utilitzarà només una vegada.
Conceptes Clau
- Definició i Ús: Les classes anònimes es defineixen dins d'una expressió i s'utilitzen immediatament.
- Sintaxi: La sintaxi de les classes anònimes és compacta i es basa en la creació d'una nova instància d'una classe o interfície.
- Limitacions: Les classes anònimes no poden tenir constructors explícits ni mètodes estàtics.
Sintaxi i Estructura
La sintaxi bàsica per crear una classe anònima és la següent:
Exemple 1: Classe Anònima que Extén una Classe
abstract class Animal { abstract void makeSound(); } public class Main { public static void main(String[] args) { Animal myAnimal = new Animal() { @Override void makeSound() { System.out.println("Roar!"); } }; myAnimal.makeSound(); // Output: Roar! } }
Exemple 2: Classe Anònima que Implementa una Interfície
interface Greeting { void sayHello(); } public class Main { public static void main(String[] args) { Greeting greeting = new Greeting() { @Override public void sayHello() { System.out.println("Hello, World!"); } }; greeting.sayHello(); // Output: Hello, World! } }
Exercicis Pràctics
Exercici 1: Classe Anònima amb una Interfície
Crea una classe anònima que implementi la interfície Runnable
i imprimeixi un missatge a la consola.
public class Main { public static void main(String[] args) { Runnable runnable = new Runnable() { @Override public void run() { System.out.println("Running in a thread!"); } }; Thread thread = new Thread(runnable); thread.start(); } }
Exercici 2: Classe Anònima amb una Classe Abstracta
Defineix una classe abstracta Shape
amb un mètode abstracte draw()
. Crea una instància de Shape
utilitzant una classe anònima que implementi el mètode draw()
per dibuixar un cercle.
abstract class Shape { abstract void draw(); } public class Main { public static void main(String[] args) { Shape circle = new Shape() { @Override void draw() { System.out.println("Drawing a circle"); } }; circle.draw(); // Output: Drawing a circle } }
Errors Comuns i Consells
- No es poden definir constructors: Les classes anònimes no poden tenir constructors explícits. Si necessites inicialitzar alguna cosa, fes-ho dins d'un bloc d'inicialització.
- No es poden definir mètodes estàtics: Les classes anònimes no poden tenir mètodes estàtics.
- Ús limitat: Les classes anònimes són útils per a implementacions ràpides i senzilles. Si la classe necessita ser reutilitzada o és massa complexa, considera definir una classe normal.
Resum
Les classes anònimes són una eina útil per crear implementacions ràpides i senzilles de classes i interfícies. Permeten escriure codi més compacte i llegible quan només es necessita una instància única d'una classe. Tot i això, tenen limitacions que cal tenir en compte, com la impossibilitat de definir constructors o mètodes estàtics. Amb la pràctica, podràs identificar quan és adequat utilitzar classes anònimes i com treure'n el màxim profit.
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