1. Balene e mucche

Ecco un fatto zoologico interessante: una mucca è molto più vicina a una balena che, ad esempio, a un ippopotamo. Si scopre che mucche e balene sono parenti relativamente stretti.

Guarda qui. Parliamo del polimorfismo , un altro strumento molto potente di OOP . Ha quattro caratteristiche.


2. L'eredità non è una panacea

Immagina di aver scritto una Cowlezione per un gioco. Ha molti campi e metodi. Gli oggetti di questa classe possono fare varie cose: camminare, mangiare e dormire. Anche le mucche indossano un campanello che suona quando camminano. Supponiamo di aver implementato tutto nella classe nei minimi dettagli.

E poi arriva il tuo cliente e dice che vuole rilasciare un nuovo livello di gioco, in cui tutta l'azione si svolge in mare, e il personaggio principale è una balena.

Inizi a progettare una Whaleclasse e ti rendi conto che è solo leggermente diversa dalla Cowclasse. La logica di entrambe le classi è molto simile e si decide di utilizzare l'ereditarietà.

Polimorfismo in Java

La Cowclasse è ideale per assumere il ruolo della classe genitore: ha tutte le variabili ei metodi necessari. Tutto quello che dobbiamo fare è dare alla balena la capacità di nuotare. Ma c'è un problema: la tua balena ha zampe, corna e un campanello. Dopotutto, questa funzionalità è implementata all'interno della Cowclasse. Cosa si può fare qui?

Polimorfismo in Java.  Eredità

3. Override del metodo

L'override del metodo viene in nostro soccorso. Se abbiamo ereditato un metodo che non fa esattamente quello che vogliamo nella nostra nuova classe, possiamo sostituire quel metodo con un altro.

Override del metodo

Come si fa? Nella nostra classe discendente, dichiariamo lo stesso metodo del metodo della classe genitore che vogliamo sovrascrivere. Scriviamo il nostro nuovo codice in esso. E questo è tutto: è come se il vecchio metodo nella classe genitore semplicemente non esistesse.

Ecco come funziona:

Codice Descrizione
class Cow
{
   public void printColor ()
   {
      System.out.println("I'm a white whale");
   }

   public void printName()
   {
      System.out.println("I'm a cow");
   }
}

class Whale extends Cow
{
   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
  • Qui sono definite due classi - CoweWhale
  • WhaleereditaCow
  • La Whaleclasse esegue l'override del printName()metodo
public static void main(String[] args)
{
   Cow cow = new Cow();
   cow.printName();
}
Questo codice visualizza il seguente testo sullo schermo:
I'm a cow
public static void main(String[] args)
{
   Whale whale = new Whale();
   whale.printName();
}
Questo codice mostra quanto segue sullo schermo:
I'm a whale

Dopo aver ereditato la Cowclasse e sovrascritto il printNamemetodo, la Whaleclasse contiene effettivamente i seguenti dati e metodi:

class Whale
{
   public void printColor()
   {
      System.out.println("I'm a white whale");
   }

   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
Non conosciamo nessun vecchio metodo.