Programmazione per TWM: Esercitazione di laboratorio #17 (29/04)

Gli obiettivi di questa esercitazione sono: capire i concetti di ereditarietà e sovrascrittura, sfruttare l'ereditarietà per il riutilizzo del codice, saper utilizzare la parola riservata super, saper utilizzare semplici gerarchie di classi (capitolo 9 fino a 9.2.3 compreso).

Raccomandazioni: Ove non altrimenti indicato, rispondete alle domande prima ragionando su carta e poi provando a editare, compilare ed eseguire. Gli esercizi etichettati con l'asterisco (*) sono più difficili: affrontateli dopo aver risolto gli altri.

Esercizio 1

Obiettivo: comprendere il concetto di ereditarietà e sovrascrittura.

Attività:

  1. Considerate il codice seguente:
    class A {
      public int m1() {
        return 1;
      }
      
      public int m2() {
        return 2;
      }
    }  
    
    class B extends A {
      public int m2() {
        return 4;
      }
      
      public int m3() {
        return 3;
      }
    }
    Completate il programma Esercizio1 per far in modo che stampi 2
    class Esercizio1 {
      public static void main(String[] args) {
        A pippo = new A();
        B pluto = new B();
        System.out.println(     .m  );
      }
    }
  2. Completate il programma Esercizio1 dell'attività 1 per far in modo che stampi 4.
  3. Completate il programma Esercizio1 dell'attività 1 per far in modo che stampi 1. Esiste un'unica soluzione?
  4. Completate il programma Esercizio1 dell'attività 1 per far in modo che stampi 3.
  5. Definire la classe C che estende A tale che il codice seguente stampi 2,6
    class Esercizio1 {
      public static void main(String[] args) {
        C paperino = new C();
        int x = paperino.m2();
        int y = paperino.m3();
        System.out.println(x+","+y);
      }
    }
  6. Considerando le classi A, B e C definite ai punti precedenti, completare il codice della classe D (dovete sostituire solo i puntini)
    class D extends .... {
    }
    per fare in modo che il programma seguente stampi 2,6
    class Esercizio1 {
      public static void main(String[] args) {
        D paperino = new D();
        int x = paperino.m2();
        int y = paperino.m3();
        System.out.println(x+","+y);
      }
    }
  7. Completate il seguente codice (non è detto che tutti i puntini debbano essere sostituiti)
    class A ... {
      public int m1() {
        return 10;
      }
    }
    
    class B ... {
      public int m2() {
        return 7;
      }
    }
    
    class C ... {
      public int m2() {
        return 3;
      }
    
      public int m3() {
        return 1;
      }
    }
    per fare in modo che il programma Esercizio1 stampi 70
    class Esercizio1 {
      public static void main(String[] args) {
        B paperinik = new B();
        System.out.println(paperinik.m3()*paperinik.m2()*paperinik.m1());
      }
    }

Esercizio 2

Obiettivo: saper utilizzare la parola riservata super.

Attività:

  1. Considerate il codice seguente:
    class A {
      protected int x;
      public A(int x) {
        this.x = x;
      }
    }
    class B extends A {
      public B(int x) {
        ...
      }
    }
    cosa si deve sostituire ai puntini perché il compilatore non dia errore?
    1. nulla
    2. this.x = x;
    3. super.x = x;
    4. this(x);
    5. super(x);
    6. A(x);
    verificate le vostre risposte ricompilando.
  2. Considerate il codice seguente:
    class A {
      protected int x;
      public A() {
        this.x = 3;
      }
    }
    class B extends A {
      public B(int x) {
        ...
      }
    }
    cosa si deve sostituire ai puntini perché il compilatore non dia errore?
    1. nulla
    2. this.x = x;
    3. super.x = x;
    4. this();
    5. this(x);
    6. super();
    7. super(x);
    8. A();
    verificate le vostre risposte ricompilando.
  3. Come si deve completare il codice seguente per fare in modo che vengano stampate sempre due righe uguali qualunque sia l'implementazione di A?
    class B extends A {
      public String stampa() {
        return "ciao ";
      }
      public String scrivi() {
        return ..........;
      }
      
      public static void main(String[] args) {
        A x = new A();
        B y = new B();
        System.out.println(x.stampa() + y.stampa());
        System.out.println(y.scrivi());
      }
    }
      
    verificate la vostra risposta con questa implementazione di A:
    class A {
      public String stampa() {
        return "hello ";
      }
    }
  4. Definire le classi A e B, una estensione dell'altra, in modo che il seguente programma stampi costruttore di B costruttore di A
    class Esercizio2 {
      public static void main(String[] args) {
        A x = new A(3,3);
      }
    }
    
    Suggerimento: i costruttori di entrambe le classi devono contenere System.out.print("costruttore di ...");

Fate l'amore e non la guerra!Valid HTML 4.01! Valid CSS! Paolo Coppola
Last modified: 2003-04-29