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'utilitzarextendsper 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
getterisettersi 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
