Introducció

L'herència és un concepte fonamental en la programació orientada a objectes (OOP) que permet crear noves classes a partir de classes existents. Això facilita la reutilització del codi i la creació de jerarquies de classes més organitzades i mantenibles. En Groovy, l'herència es gestiona de manera similar a altres llenguatges orientats a objectes com Java.

Conceptes Clau

  • Classe Base (Superclasse): La classe de la qual s'hereten propietats i mètodes.
  • Classe Derivada (Subclasse): La classe que hereta propietats i mètodes de la classe base.
  • extends Keyword: Paraula clau utilitzada per indicar que una classe hereta d'una altra.

Exemples Pràctics

Definició d'una Superclasse

class Animal {
    String name

    void eat() {
        println("${name} is eating")
    }
}

Definició d'una Subclasse

class Dog extends Animal {
    void bark() {
        println("${name} is barking")
    }
}

Utilització de la Subclasse

Dog dog = new Dog()
dog.name = "Buddy"
dog.eat()  // Output: Buddy is eating
dog.bark() // Output: Buddy is barking

Sobreescriptura de Mètodes

La sobreescriptura de mètodes permet que una subclasse proporcioni una implementació específica d'un mètode que ja està definit en la seva superclasse.

class Cat extends Animal {
    @Override
    void eat() {
        println("${name} is eating fish")
    }
}

Cat cat = new Cat()
cat.name = "Whiskers"
cat.eat() // Output: Whiskers is eating fish

Utilització de super

La paraula clau super es pot utilitzar per accedir als mètodes i propietats de la superclasse des de la subclasse.

class Bird extends Animal {
    @Override
    void eat() {
        super.eat()
        println("${name} is eating seeds")
    }
}

Bird bird = new Bird()
bird.name = "Tweety"
bird.eat() // Output: Tweety is eating
           //         Tweety is eating seeds

Exercicis Pràctics

Exercici 1: Crear una Jerarquia de Classes

  1. Crea una classe Vehicle amb una propietat make i un mètode start().
  2. Crea una subclasse Car que hereti de Vehicle i afegeixi una propietat model i un mètode drive().
  3. Crea una instància de Car, assigna valors a les propietats i crida als mètodes start() i drive().

Solució

class Vehicle {
    String make

    void start() {
        println("${make} is starting")
    }
}

class Car extends Vehicle {
    String model

    void drive() {
        println("${make} ${model} is driving")
    }
}

Car car = new Car()
car.make = "Toyota"
car.model = "Corolla"
car.start() // Output: Toyota is starting
car.drive() // Output: Toyota Corolla is driving

Exercici 2: Sobreescriptura de Mètodes

  1. Crea una classe Person amb una propietat name i un mètode introduce().
  2. Crea una subclasse Student que hereti de Person i sobreescrigui el mètode introduce() per afegir "I am a student" a la sortida.
  3. Crea una instància de Student, assigna un valor a la propietat name i crida al mètode introduce().

Solució

class Person {
    String name

    void introduce() {
        println("Hello, my name is ${name}")
    }
}

class Student extends Person {
    @Override
    void introduce() {
        super.introduce()
        println("I am a student")
    }
}

Student student = new Student()
student.name = "Alice"
student.introduce() // Output: Hello, my name is Alice
                    //         I am a student

Errors Comuns i Consells

  • Oblidar la paraula clau extends: Assegura't d'utilitzar extends per indicar que una classe hereta d'una altra.
  • No cridar al constructor de la superclasse: Si la superclasse té un constructor amb paràmetres, assegura't de cridar-lo des de la subclasse utilitzant super().
  • Confusió entre super i this: Utilitza super per accedir a membres de la superclasse i this per accedir a membres de la classe actual.

Conclusió

L'herència és una eina poderosa en la programació orientada a objectes que permet la reutilització del codi i la creació de jerarquies de classes més organitzades. En aquest tema, hem après com definir superclasses i subclasses, com sobreescriure mètodes i com utilitzar la paraula clau super. Amb aquests coneixements, estàs preparat per crear estructures de classes més complexes i eficients en Groovy.

© Copyright 2024. Tots els drets reservats