Video: Gestione delle Classi e Oggetti ~ Lezione 7 Java 2024
Sia le interfacce che le classi astratte hanno metodi astratti in Java. Ma i metodi astratti giocano ruoli leggermente diversi in questi due tipi di tipi di riferimento. Come puoi tenere tutto dritto nella tua mente?
La prima cosa da fare è ricordare che nessuno impara a conoscere i concetti di programmazione orientata agli oggetti senza avere molta pratica nella scrittura del codice. Se sei confuso, potrebbe essere una buona cosa. Significa che hai capito abbastanza per sapere quanto sia complicata questa roba. Più codice scrivi, più sarai comodo con classi, interfacce e tutte queste altre idee.
La prossima cosa da fare è risolvere le differenze nel modo in cui dichiari i metodi astratti. Ecco la storia.
In una classe ordinaria (non astratta) | in un'interfaccia | in una classe astratta | |
Sono consentiti metodi astratti? | No | Sì | Sì |
Una dichiarazione di metodo può contenere la parola chiave abstract ? | No | Sì | Sì |
Una dichiarazione di metodo può contenere la parola chiave predefinita (che significa "non astratto")? | No | Sì | No |
Senza né il astratto né il predefinito | Non astratto | Astratto | Non astratto |
Entrambe le interfacce e le classi astratte hanno metodi astratti. Quindi ti starai chiedendo come scegliere tra dichiarare un'interfaccia e dichiarare una classe astratta. In effetti, potresti chiedere a tre programmatori professionisti come le interfacce e le classi astratte differiscono l'una dall'altra. Se lo fai, potresti ottenere cinque risposte diverse. (Sì, cinque risposte, non tre risposte).
Le interfacce e le classi astratte sono bestie simili e le nuove funzionalità di Java 8 le rendono ancora più simili rispetto alle precedenti versioni di Java. Ma l'idea di base riguarda le relazioni tra le cose.
- L'estensione di una sottoclasse rappresenta una una relazione.
- L'implementazione di un'interfaccia rappresenta una relazione può fare.
Se vuoi una prova più tangibile della differenza tra un'interfaccia e una classe astratta, considera questo: una classe può implementare molte interfacce, ma una classe può estendere solo un'altra classe, anche se quella classe è una classe astratta. Quindi, dopo aver dichiarato
la classe pubblica Dog estende HousePet
non puoi anche fare
Cane
estendere una classe
Amico
. Ma puoi far
Dog
implementare un'interfaccia
Befriendable
. E poi puoi fare la stessa classe
Cane
implementare un'interfaccia
Trainable
.
E, se vuoi una differenza anche più tra un'interfaccia e una classe astratta, eccone uno per te: Un'interfaccia non può contenere campi non statici e non finali.
Così là. Le interfacce e le classi astratte sono diverse l'una dall'altra. Ma se sei nuovo nel gioco, non dovresti preoccuparti della differenza. Basta leggere più codice che puoi e non spaventarti quando vedi un metodo astratto. Questo è tutto ciò che c'è da fare.