Classi Derivate ed Ereditarietà in Java

In una lezione precedente abbiamo introdotto le classi ed in particolare abbiamo fatto l’esempio della classe CPersona con gli attributi: nome, cognome e data di nascita. In questo nuovo appuntamento del corso sul linguaggio Java analizzeremo l’ereditarietà delle classi vedendo nel codice qual’è la sintassi per derivare una classe da un’altra. Una classe derivata o sottoclasse è una specializzazione di una classe padre, prendiamo l’esempio già visto per CPersona, una sua classe derivata potrebbe essere CStudente, perchè lo studente è una persona con la particolarità di avere una matricola, quindi sarà una persona specializzata.

// File CPersona.java

package corso;

public class CPersona
{
   protected String m_strNome;
   protected String m_strCognome;
   protected boolean m_bUomo;

   CPersona(String strNome, String strCognome,
            boolean bUomo)
   {
      m_strNome = strNome;
      m_strCognome = strCognome;
      m_bUomo = bUomo;
   }

   public void StampaPersona()
   {
      String strOut = m_strNome + " " + m_strCognome + " ";
      strOut += m_bUomo ? "Uomo" : "Donna";
      System.out.println(strOut);
   }
}

// File CStudente.java

package corso;

public class CStudente extends CPersona
{
   protected String m_strMatricola;

   CStudente(String strNome, String strCognome,
           boolean bUomo, String strMatricola)
   {
       super(strNome, strCognome, bUomo);
       m_strMatricola = strMatricola;
   }

   public void StampaStudente()
   {
       super.StampaPersona();
       System.out.println("con numero di matricola: " +
          m_strMatricola + "\n");
   }
}

// file Main.java

package corso;

public class Main
{
   public static void main(String[] args)
   {
      CStudente stu1 = new CStudente("Giampaolo", "Rossi", true,
               "146");
      stu1.StampaStudente();

      CStudente stu2 = new CStudente("Annarita", "Bianchi",
          false, "218");
      stu2.StampaStudente();

      System.out.println("La sola persona uomo nella classe:");
      stu1.StampaPersona();
   }
}

Come potete notare occorre inserire la parola chiave extends per derivare una classe e super per richiamare attributi e membri della classe padre, mentre per accedere agli attributi e metodi della classe corrente si deve utilizzare this. Come prossimo esercizio espandiamo il cerchio per gestire anche la sfera.

// file CCerchio

package corso;

public class CCerchio
{
       protected final double pi = 3.14159;
       private double m_dRaggio;

       CCerchio()
       {
               m_dRaggio = 0.0;
       }

       CCerchio(double dRaggio)
       {
              m_dRaggio = dRaggio;
       }

        void SetRaggio(double dRaggio)
        {
              m_dRaggio = dRaggio;
        }

        double GetRaggio()
        {
               return m_dRaggio;
        }

        double GetDiametro()
        {
                 return m_dRaggio * 2;
        }

        double GetCirconferenza()
        {
               return 2 * pi * m_dRaggio;
        }

        double GetArea()
        {
                return m_dRaggio * m_dRaggio * pi;
        }
}

// File CSfera.java

package corso;

public class CSfera extends CCerchio
{
   CSfera(double dRaggio)
   {
       super(dRaggio);
   }

   public double GetSuperficie()
   {
       return GetCirconferenza() * 2.0 * GetRaggio();
   }

   public double GetVolume()
   {
       return (GetArea() * 4.0 * GetRaggio()) / 3.0;
   }
}

// file Main.java

package corso;

public class Main
{
      public static void main(String[] args)
      {
         CSfera sf = new CSfera(12.76);

         System.out.println("L'area della sfera di raggio " +
           sf.GetRaggio() + " è di " + sf.GetSuperficie());
         System.out.println("Il volume della sfera di raggio " +
           sf.GetRaggio() + " è di " + sf.GetVolume());
      }
}

Continuate a creare vostri esperimenti di codice e fare sempre nuove prove prendendo spunto dai miei esempi, in futuro riutilizzeremo tante di quelle volte queste conoscenze che, se seguirete con interesse il corso, vi rimarranno familiari a forza di utilizzarle. Come sempre vi invito a chiarire i vostri dubbi ed incertezze nel nostro forum, il link lo trovate in alto a destra in questa pagina.

<< Lezione Precedente – Inizio CorsoLezione Successiva >>

Pubblicato
Categorie: Java

Di Giampaolo Rossi

Sviluppatore software da oltre 16 anni.