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.
Sfida
FacileCostruiamo 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()epowerOff(), entrambi con valore di ritorno void.VolumeControl.java: Definisci un'interfaccia per i dispositivi con controllo del volume. Dovrebbe dichiarare un metodosetVolume(int level)con valore di ritorno void e un metodogetVolume()con valore di ritorno int.SmartTV.java: Crea una classe che implementi entrambe le interfaccePowerableeVolumeControl. La tua SmartTV dovrebbe avere un campobrand(String), un campoisOn(boolean, inizialmente false) e un campovolume(int, inizialmente 0). Includi un costruttore che accetti il nome del brand. Implementa tutti i metodi richiesti:powerOn()dovrebbe impostareisOnsu true e stampare:[brand] TV is now ONpowerOff()dovrebbe impostareisOnsu false e stampare:[brand] TV is now OFFsetVolume(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]usandogetVolume() - Chiama
powerOff()
- Chiama
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()
}
}
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
1Fondamenti della programmazione a oggetti
File esterniIntroduzione alla programmazione a oggettiClassi e oggettiLa parola chiave thisMetodiCampi (attributi)Metodo costruttoreSovraccarico dei costruttoriRipasso - Calcolatrice semplice4Ereditarietà
Ereditarietà di base (extends)La parola chiave superSovrascrittura dei metodi (@Override)Concatenamento dei costruttoriLa classe ObjectEreditarietà singola e multilivelloPerché non esiste l'ereditarietà multipla delle classiRiepilogo: gerarchia dei dipendenti7Metodi speciali e classe Object
Metodo toString()equals() e hashCode()Metodo clone()compareTo() e ComparableInterfaccia ComparatorRiepilogo - Ordinamento personalizzato2Modificatori di accesso e incapsulamento
Panoramica dei livelli di accessoMetodi getter e setterNascondimento delle informazioniLa parola chiave finalRiepilogo - Gestore di conti bancari5Polimorfismo
Nozioni di base sull'overloading dei metodiOverride dei metodi (a runtime)Upcasting e downcastingL'operatore instanceofClassi e metodi astrattiRiepilogo - Calcolatore di forme8Concetti avanzati di OOP
Composizione vs ereditarietàAggregazione vs composizioneClassi interne, annidate e anonimeEnum e metodi degli EnumRecord (Java 16+)Classi sealed (Java 17+)11Modelli di progettazione Parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern BuilderPattern ObserverPattern Strategy3Proprietà di classe e membri statici
Variabili di istanza e staticheMetodi staticiBlocchi staticiCostanti (static final)Riepilogo - Contatore e utility6Interfacce e classi astratte
Introduzione alle interfacceImplementazione delle interfacceImplementazione di più interfacceMetodi default e static nelle interfacceClassi astratte e interfacce a confrontoInterfacce funzionaliRiepilogo: sistema di pagamento9Tipi generici
Introduzione ai tipi genericiClassi genericheMetodi genericiParametri di tipo con limitiCaratteri jolly (?, extends, super)Riepilogo - Contenitore generico12Modelli di progettazione – Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern IteratorEsercitati da solo: Compilatore Java online