Introduzione all'override dei metodi e alla ricorsione

Input/Output e Stream in Java

Alex Liu

Software Development Engineer

Definire una classe base

  • La classe Animal rappresenta un animale generico
    class Animal {
      void makeSound() {
          System.out.println("Animal sound");
      }
      public static void main(String[] args) {
          Animal a = new Animal();
          a.makeSound(); // Output: Animal sound
      }
    }
    
Animal sound
Input/Output e Stream in Java

Capire l'ereditarietà - extends

// Usa `extends` per creare una sottoclasse di `Animal` chiamata `Dog`
class Dog extends Animal {
    void bark() {System.out.println("Bark");}
}
public static void main(String[] args) {
    Dog d = new Dog(); // Crea una nuova istanza di Dog che estende Animal
    d.makeSound();
    d.bark();
}
  • Stampa entrambi i suoni su righe separate:
Animal sound
Bark
Input/Output e Stream in Java

Override dei metodi in Java

class Cat extends Animal {
    @Override // Usa `@Override` per sovrascrivere il comportamento di `.makeSound()`
    void makeSound() {
        System.out.println("Meow");
    }
}
public static void main(String[] args) {
    Cat c = new Cat(); // Crea una nuova istanza di Cat che estende Animal
    c.makeSound(); // Chiama il metodo sovrascritto `makeSound()`
}
Meow
Input/Output e Stream in Java

Capire la ricorsione

  • Un metodo che chiama se stesso per risolvere un problema
  • Richiede un caso base per evitare ricorsioni infinite
public class RecursionExample {
    static void countdown(int n) {
        // Caso base
        if (n == 0) return; 
        System.out.println(n);
        // Chiamata ricorsiva
        countdown(n - 1); 
    }
}
Input/Output e Stream in Java

Esempio di ricorsione

  • Esempio d'uso
    public static void main(String[] args) {
      countdown(5);
    }
    
  • Le chiamate ricorsive si fermano quando raggiungono il caso base, 0
    5
    4
    3
    2
    1
    
Input/Output e Stream in Java

Riepilogo

  • extends abilita l'ereditarietà

  • @Override modifica il comportamento ereditato

  • La ricorsione scompone il problema in passi più piccoli

    • Il caso base evita ricorsioni infinite
Input/Output e Stream in Java

Passiamo alla pratica !

Input/Output e Stream in Java

Preparing Video For Download...