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

public class Animal {
    String nom;

    void menjar() {
        System.out.println(nom + " està menjant.");
    }
}

Classe Filla

public class Gos extends Animal {
    void bordar() {
        System.out.println(nom + " està bordant.");
    }
}

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

Rex està menjant.
Rex està bordant.

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'utilitzar extends 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 i setter 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

Mòdul 2: Flux de Control

Mòdul 3: Programació Orientada a Objectes

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

Mòdul 8: Multithreading i Concurrència

Mòdul 9: Xarxes

Mòdul 10: Temes Avançats

Mòdul 11: Frameworks i Llibreries de Java

Mòdul 12: Construcció d'Aplicacions del Món Real

© Copyright 2024. Tots els drets reservats