Ridefinizione dei metodi

In una sottoclasse, possiamo cambiare il comportamento delle istanze attraverso la ridefinizione dei metodi della superclasse.

ruby> class Umano
    |   def identificazione
    |     print "Sono una persona."
    |   end
    |   def biglietto_treno(anni)
    |     if anni < 12
    |       print "Biglietto ridotto.";
    |     else
    |       print "Biglietto normale.";
    |     end
    |   end
    | end
   nil
ruby> Umano.new.identificazione
Sono una persona.
   nil
ruby> class Studente1<Umano
    |   def identificazione
    |     print "Sono uno studente."
    |   end
    | end
   nil
ruby> Studente1.new.identificazione
Sono uno studente.
   nil

 

Supponiamo di voler migliorare il metodo identificazione della superclasse invece di sostituirlo.  Per farlo possiamo usare super.

ruby> class Studente2<Umano
    |   def identificazione
    |     super
    |     print "Sono anche uno studente."
    |   end
    | end
   nil
ruby> Studente2.new.identificazione
Sono una persona.
Sono anche uno studente.
   nil

 

super ci permette di passare degli argomenti al metodo originale. E' cosa nota che ci sono due tipi di persone...

ruby> Disonesto<Umano
    |   def biglietto_treno(anni)
    |     super(11) # vogliamo un biglietto economico.
    |   end
    | end
   nil
ruby> Disonesto.new.biglietto_treno(25)
Biglietto ridotto.
   nil

ruby> class Onesto<Umano
    |   def biglietto_treno(anni)
    |     super(anni) # passa l'argomento che gli abbiamo dato
    |   end
    | end
   nil
ruby> Onesto.new.biglietto_treno(25)
Biglietto normale.
   nil

 

Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Sara
Hai dubbi su questo articolo?