CodeGym /Corso Java /Frontend SELF IT /Ereditarietà delle classi

Ereditarietà delle classi

Frontend SELF IT
Livello 40 , Lezione 0
Disponibile

7.1 Fondamenti dell'ereditarietà

L'ereditarietà delle classi in JavaScript permette di creare nuove classi basate su classi esistenti, riutilizzando ed estendendo la loro funzionalità. Questo è un aspetto fondamentale della programmazione orientata agli oggetti (OOP), che consente di creare gerarchie di classi e gestire il comportamento degli oggetti.

Per l'ereditarietà delle classi si utilizza la parola chiave extends. La classe che eredita un'altra classe si chiama classe derivata (subclass), e la classe da cui deriva si chiama classe base (superclass).

Esempio:

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        speak() {
          console.log(`${this.name} barks.`);
        }
      }

      const dog = new Dog('Rex');
      dog.speak(); // "Rex barks."
    
  

Spiegazione:

  • La classe Animal è la classe base con un costruttore e un metodo speak()
  • La classe Dog eredita da Animal e ridefinisce il metodo speak()
  • L'istanza dog della classe Dog utilizza il metodo ridefinito speak()

7.2 La parola chiave super

La parola chiave super viene utilizzata per chiamare il costruttore o i metodi della classe base dalla classe derivata.

1. Chiamata del costruttore della classe base

La classe derivata deve chiamare il costruttore della classe base usando super() prima di usare this.

Esempio:

Il costruttore Dog chiama super(name) per inizializzare la proprietà name della classe base Animal.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        constructor(name, breed) {
          super(name);
          this.breed = breed;
        }

        speak() {
          console.log(`${this.name} barks.`);
        }
      }

      const dog = new Dog('Rex', 'Labrador');
      console.log(dog.name); // "Rex"
      console.log(dog.breed); // "Labrador"
      dog.speak(); // "Rex barks."
    
  

2. Chiamata dei metodi della classe base

I metodi della classe base possono essere chiamati dalla classe derivata usando super.

Esempio:

Il metodo speak() della classe Dog chiama il metodo speak() della classe base Animal utilizzando super.speak(), e poi esegue la propria logica.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        speak() {
          super.speak(); // Chiamata del metodo della classe base
          console.log(`${this.name} barks.`);
        }
      }

      const dog = new Dog('Rex');
      dog.speak();

      // "Rex makes a noise."
      // "Rex barks."
    
  

7.3 Ereditarietà e ridefinizione dei metodi

L'ereditarietà permette alle classi derivate di ridefinire i metodi della classe base. Questo consente di modificare o espandere la funzionalità dei metodi.

Esempio:

Il metodo speak() della classe Dog ridefinisce il metodo speak() della classe base Animal, fornendo la propria implementazione.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        speak() {
          console.log(`${this.name} barks.`);
        }
      }

      const animal = new Animal('Generic Animal');
      animal.speak(); // "Generic Animal makes a noise."

      const dog = new Dog('Rex');
      dog.speak(); // "Rex barks."
    
  

7.4 Ereditarietà e metodi aggiuntivi

La classe derivata può aggiungere nuovi metodi non presenti nella classe base.

Esempio:

La classe Dog aggiunge un nuovo metodo fetch() che non esiste nella classe base Animal.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        speak() {
          console.log(`${this.name} barks.`);
        }

        fetch() {
          console.log(`${this.name} is fetching.`);
        }
      }

      const dog = new Dog('Rex');
      dog.speak(); // "Rex barks."
      dog.fetch(); // "Rex is fetching."
    
  

7.5 Controllo dell'ereditarietà

Per verificare l'ereditarietà si può usare l'operatore instanceof e il metodo isPrototypeOf().

Esempio:

L'operatore instanceof verifica se un oggetto è un'istanza di una classe. Il metodo isPrototypeOf() verifica se il prototipo di un oggetto è parte della catena dei prototipi di un altro oggetto.

JavaScript
    
      console.log(dog instanceof Dog); // true
      console.log(dog instanceof Animal); // true
      console.log(Animal.prototype.isPrototypeOf(Dog.prototype)); // true
    
  
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION