Categories: Java

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 >>

Share
Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.

Published by
Giampaolo Rossi

Recent Posts

Un Abbonamento per Tutti i Software

Sono arrivato alla convinzione che un abbonamento per tutti i miei software gestionali sia il…

1 anno ago

Software di Magazzino Gratuito

MerciGest è un software per la gestione del magazzino completamente gratuito. Continua a leggere→

1 anno ago

Mettere il PC in Lock Screen

In ufficio può capitare di doversi allontanare dal proprio posto di lavoro, ecco che allora…

3 anni ago

Fare il reset togliendo la corrente

In questo articolo vedremo quando è più o meno utile togliere la corrente ad un…

3 anni ago

Prossimi Aggiornamenti Software

Dopo la pausa invernale dovuta al lavoro che devo fare per sostentarmi, eccomi di nuovo…

3 anni ago

Come Eliminare i Files in Windows

Vediamo come eliminare i files direttamente da Windows senza utilizzare il cestino. Continua a leggere→

4 anni ago