Menu
Coddy logo textTech

Implementazione di più interfacce

Fa parte della sezione Programmazione orientata agli oggetti del percorso Java di Coddy. Lezione 36 di 87.

A differenza dell’ereditarietà tra classi, che consente di estendere una sola classe, Java permette a una classe di implementare più interfacce. È così che Java realizza una forma di ereditarietà multipla in modo sicuro.

Per implementare più interfacce, elencale dopo la parola chiave implements, separate da virgole:

public interface Drawable {
    void draw();
}

public interface Resizable {
    void resize(int width, int height);
}

public class Rectangle implements Drawable, Resizable {
    private int width, height;
    
    public Rectangle(int width, int height) {
        this.width = width;
        this.height = height;
    }
    
    @Override
    public void draw() {
        System.out.println("Drawing rectangle " + width + "x" + height);
    }
    
    @Override
    public void resize(int width, int height) {
        this.width = width;
        this.height = height;
    }
}

La classe deve implementare tutti i metodi di ogni interfaccia che dichiara. Puoi anche combinare l’ereditarietà con più interfacce:

public class Square extends Shape implements Drawable, Resizable {
    // Deve implementare i metodi di entrambe le interfacce
    // Può anche usare i membri ereditati da Shape
}

Questa flessibilità ti permette di progettare classi che svolgono più ruoli. Uno SmartPhone potrebbe implementare le interfacce Callable, Messageable e Browsable, ognuna delle quali definisce diverse funzionalità supportate dal telefono.

challenge icon

Sfida

Facile

Costruiamo un sistema di dispositivi intelligenti in cui i dispositivi possono avere più funzionalità. Creerai una SmartTV che può essere accesa/spenta e di cui è possibile controllare il volume: vedrai così come una singola classe può implementare più interfacce per svolgere ruoli diversi.

Organizzerai il codice in quattro file:

  • Powerable.java: Definisci un'interfaccia per i dispositivi che possono essere accesi. Dovrebbe dichiarare due metodi: powerOn() e powerOff(), entrambi con valore di ritorno void.
  • VolumeControl.java: Definisci un'interfaccia per i dispositivi con controllo del volume. Dovrebbe dichiarare un metodo setVolume(int level) con valore di ritorno void e un metodo getVolume() con valore di ritorno int.
  • SmartTV.java: Crea una classe che implementi entrambe le interfacce Powerable e VolumeControl. La tua SmartTV dovrebbe avere un campo brand (String), un campo isOn (boolean, inizialmente false) e un campo volume (int, inizialmente 0). Includi un costruttore che accetti il nome del brand. Implementa tutti i metodi richiesti:
    • powerOn() dovrebbe impostare isOn su true e stampare: [brand] TV is now ON
    • powerOff() dovrebbe impostare isOn su false e stampare: [brand] TV is now OFF
    • setVolume(int level) dovrebbe aggiornare il volume e stampare: [brand] TV volume set to [level]
    • getVolume() dovrebbe restituire il volume corrente
  • Main.java: Metti insieme tutti gli elementi per dimostrare l'implementazione di più interfacce. Riceverai due input: un nome di brand (String) e un livello del volume (int). Crea una SmartTV con il brand specificato, poi:
    • Chiama powerOn()
    • Chiama setVolume() con il livello specificato
    • Stampa: Current volume: [volume] usando getVolume()
    • Chiama powerOff()

Riceverai due input: il brand della TV (String) e il livello del volume (int).

Il tuo output dovrebbe mostrare quattro righe che dimostrano come la tua SmartTV rispetta entrambi i contratti delle interfacce. Può essere accesa e spenta come qualsiasi dispositivo Powerable e il suo volume può essere controllato come quello di qualsiasi dispositivo VolumeControl!

Provalo tu

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leggi gli input
        String brand = scanner.nextLine();
        int volumeLevel = scanner.nextInt();
        
        // TODO: Crea una SmartTV con la marca indicata
        
        // TODO: Chiama powerOn()
        
        // TODO: Chiama setVolume() con il livello indicato
        
        // TODO: Stampa: Current volume: [volume] usando getVolume()
        
        // TODO: Chiama powerOff()
        
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Java online