a cura di Dario Dariol
 
     

    Esercizio 010 - Interfacce e Classi

     
    Java (a differenza del C++) introduce il concetto di interfaccia distinta dal concetto di classe.
    Tutti i buoni libri di testo su Java evidenziano le caratteristiche che differenziano le interfacce dalle classi (una fra tutte l'ereditarietà multipla delle interfacce). Con questo esercizio ci soffermeremo invece su una caratteristica poca nota: l'inizializzazione di questi oggetti.
    Consideriamo quindi il seguente esempio:
    interface I {
      static int a = 1;
      static int b = Quiz10interface.incr("b", a);
    }

    interface J extends I {
      static int c = Quiz10interface.incr("c", 2);
      static int d = Quiz10interface.incr("d", c);
    }

    interface K extends J {
      static int e = Quiz10interface.incr("e", 100);
      static int f = 1000;
    }

    class Quiz10interface {
      public static void main(String[] args) {
        out("main", "a", J.a);
        out("main", "c", K.c);
        out("main", "f", K.f);
      }
      static void out(String meth, String var, int val) {
        System.out.println(meth + ": " + var + "=" + val);
      }
      static int incr(String s, int x) {
        x++;
        out("incr", s, x);
        return x;
      }
    }

  • Cosa stampa questo programma? Cioè qual'è l'output di:
    • java Quiz10interface  
  • Cambiando tutte le occorrenze di interface con class, cosa stampa il nuovo programma così ottenuto? Cioè qual'è l'output di:
    • java Quiz10class  
  • Le stampe dei due programmi sono eguali? Qual'è il motivo di ciò?
Come al solito non occorre compilare ed eseguire il pezzo di codice sopra illustrato. Bisogna invece ragionare su di esso e riuscire a rispondere ai tre problemi posti usando solo la specifica del linguaggio. Quando si è ragionevolmente sicuri delle risposte allora (e solo allora!) è possibile verificarle tramite un run di prova e/o leggere il mio commento su queste colonne verso la fine dell'estate. Non esistate a contattarmi per eventuali chiarificazioni e/o delucidazioni.




MokaByte®  è un marchio registrato da MokaByte s.r.l.

Java® è un marchio registrato da Sun Microsystems; tutti i diritti riservati

E' vietata la riproduzione anche parziale
Per comunicazioni inviare una mail a
mokainfo@mokabyte.it