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
