Introducció
L'herència és un dels pilars fonamentals de la Programació Orientada a Objectes (POO). Permet crear una nova classe a partir d'una classe existent, heretant els seus atributs i mètodes. Això facilita la reutilització del codi i la creació de jerarquies de classes.
Conceptes Clau
- Classe Pare (Superclasse): La classe de la qual s'hereten els atributs i mètodes.
- Classe Filla (Subclasse): La classe que hereta els atributs i mètodes de la classe pare.
- Herència Simple: Java només permet heretar d'una única classe pare.
- Herència Múltiple: No és suportada directament en Java, però es pot simular utilitzant interfícies.
Sintaxi Bàsica
Per crear una subclasse en Java, utilitzem la paraula clau extends
.
class ClassePare { // Atributs String nom; // Mètodes void mostrarNom() { System.out.println("Nom: " + nom); } } class ClasseFilla extends ClassePare { // Atributs addicionals int edat; // Mètodes addicionals void mostrarEdat() { System.out.println("Edat: " + edat); } }
Exemple Pràctic
Vegem un exemple pràctic per entendre millor com funciona l'herència.
Classe Pare
Classe Filla
Programa Principal
public class Main { public static void main(String[] args) { Gos gos = new Gos(); gos.nom = "Rex"; gos.menjar(); // Mètode heretat de la classe Animal gos.bordar(); // Mètode de la classe Gos } }
Sortida
Exercicis Pràctics
Exercici 1
Crea una classe Vehicle
amb els atributs marca
i model
, i un mètode mostrarDetalls()
. Després, crea una subclasse Cotxe
que afegeixi l'atribut nombreDePortes
i un mètode mostrarNombreDePortes()
.
Solució
class Vehicle { String marca; String model; void mostrarDetalls() { System.out.println("Marca: " + marca + ", Model: " + model); } } class Cotxe extends Vehicle { int nombreDePortes; void mostrarNombreDePortes() { System.out.println("Nombre de portes: " + nombreDePortes); } } public class Main { public static void main(String[] args) { Cotxe cotxe = new Cotxe(); cotxe.marca = "Toyota"; cotxe.model = "Corolla"; cotxe.nombreDePortes = 4; cotxe.mostrarDetalls(); cotxe.mostrarNombreDePortes(); } }
Exercici 2
Crea una classe Persona
amb els atributs nom
i edat
, i un mètode saludar()
. Després, crea una subclasse Estudiant
que afegeixi l'atribut curs
i un mètode estudiar()
.
Solució
class Persona { String nom; int edat; void saludar() { System.out.println("Hola, el meu nom és " + nom + " i tinc " + edat + " anys."); } } class Estudiant extends Persona { String curs; void estudiar() { System.out.println(nom + " està estudiant " + curs + "."); } } public class Main { public static void main(String[] args) { Estudiant estudiant = new Estudiant(); estudiant.nom = "Anna"; estudiant.edat = 20; estudiant.curs = "Informàtica"; estudiant.saludar(); estudiant.estudiar(); } }
Errors Comuns i Consells
- No oblidar la paraula clau
extends
: Assegura't d'utilitzarextends
per indicar que una classe hereta d'una altra. - Accés als membres de la classe pare: Recorda que els membres privats de la classe pare no són accessibles directament des de la subclasse. Utilitza mètodes
getter
isetter
si cal. - Constructors: Els constructors de la classe pare no són heretats. Si necessites inicialitzar atributs de la classe pare, utilitza la paraula clau
super
.
Conclusió
L'herència és una eina poderosa en la POO que permet la reutilització del codi i la creació de jerarquies de classes. Comprendre com funciona l'herència en Java és essencial per escriure codi més eficient i organitzat. En el següent tema, explorarem el polimorfisme, que és una extensió natural de l'herència.
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