Salve, gli dico cosa fare e tornerò come ho detto nella lezione precedente.
Le interfacce aiutano a definire le funzionalità opzionali senza compromettere il polimorfismo con il polimorfismo, intendiamo che le
interfacce aiutano a definire un protocollo comune che a sua volta aiuta a raggiungere il polimorfismo.
Quindi vediamo come le interfacce aiutano a farlo.
Sarà una lunga discussione sulle interfacce perché vogliamo andare oltre la semplice sintassi
della parte sintattica.
Vogliamo avere una chiara comprensione del ruolo delle interfacce in modo da poter progettare un buon
software orientato agli oggetti.
Quindi ci concentreremo su quegli aspetti della demo in cui la sintassi è messa in atto farà parte
di ciò che tutte le lezioni successive.
Ora sappiamo che questo è definito come protocollo comune per tutti i suoi sottotipi.
Questo è il supertipo che annuncia che il mio libro su tutte le mie pipe
ha questo tipo di metodi, in sostanza un supertipo sta specificando un contratto che fa quello che serve ai
suoi sottotipi offrirebbe il supertipo.
Definisce un contratto.
E sai che il supertipo può essere una classe e il contratto sarebbe tutti metodi pubblici e protetti
della classe.
E se le classi astratte e quindi il contratto includessero anche metodi astratti sulla classe, se fosse astratto o
meno, è possibile definire variabili di istanza in modo da renderlo tale.
Inoltre se queste variabili sono dichiarate pubbliche faranno anche parte del contratto.
Anche le variabili statiche dichiarate come pubbliche sarebbero parte del novizio del contratto di novizio del contratto può anche essere un'interfaccia
sulla sintassi di interfaccia molto simile a una classe e la vedremo tra breve.
Ma la differenza principale è che la classe parola chiave di riserva viene sostituita con
l'interfaccia parola chiave, ma con l'interfaccia il contratto sarebbe per lo più solo metodi astratti pubblici che in genere non
vedranno alcun metodo concreto prima dell'8 luglio.
In passato erano solo metodi astratti pubblici, ma dal momento che Java 8 su parole un'interfaccia può anche come metodi non
greci come vedremo in seguito.
Ma generalmente ci si può aspettare che contengano solo metodi astratti le interfacce
avranno sottoclassi che forniscono le reali implementazioni per quei metodi astratti.
Inoltre le interfacce non sarebbero come qualsiasi stato che non possono come.
Variabili di istanza.
Quindi le interfacce sono stateless poiché non ci sono variabili di istanza, non c'è alcun punto che le istanziasse.
Cioè non sono intangibili Undercliff ha senso solo perché l'intero punto di creazione di un oggetto è quello di
memorizzare uno stato che è unico per l'oggetto non gestito giocato in quello stato.
Gli altri metodi di istanza, dal momento che le interfacce non possono contenere variabili di istanza che non si
possono avere velocità inconsistenti, non avrebbero senso istanziarle.
Quindi, ovviamente, le interfacce non fanno alcun costrutto come un costruttore è necessario per creare
un oggetto.
Quindi in sostanza un'interfaccia generalmente ha solo metodi astratti che possono non avere ma non implementazioni
di metodi e quindi possono essere considerati come puro contratto.
Un'interfaccia può essere considerata come puro contratto.
Questo è un metodo appena eseguito che rappresenta e non vede nulla circa le implementazioni del
metodo di implementazione del metodo fornite da sottoclassi dell'interfaccia.
Quindi è molto più generico di un processo che include classi astratte.
Come per le classi, è possibile definire un comportamento concreto che è un metodo con cui il modello di implementazione può
funzionare con le classi.
Variabili di istanza a causa di questa mancanza di implementazione possiamo aggiungere a progetti più flessibili.
Ad esempio, come vediamo qui, l'interfaccia Java consente a una classe di essere sottografi o interfacce multiple oltre
a essere una sottoclasse di una sottoclasse.
Quindi, qui la sottoclasse non è Brousseau Tcl ed è una sottoclasse di una superclasse e
di tre interfacce che non potrebbero farlo con le sole classi poiché
Java non supporta l'ereditarietà multipla delle classi a causa dell'ambiguità dei metodi ereditari che sembrano nomi da più superclassi.
Inoltre è anche molto comune per la stessa interfaccia di come sottoclassi di sottoclassi di Andi possono
essere da progetti completamente diversi.
Tutto ciò sarà chiaro man mano che progrediamo nella sezione.
E ovviamente per ora diamo un'occhiata alla sintassi per definire un'interfaccia.
Come accennato in precedenza, la dichiarazione è simile a una classe.
L'unica differenza è che la classe parola chiave sostituisce la parola interfaccia e l'interfaccia della parola
chiave è seguita dal nome dell'interfaccia e dall'interfaccia.
Come accennato in precedenza, dato che la non-conoscenza tangibile avanzata è implicitamente astratta, si può in effetti
includere la parola abstract nella Dichiarazione e il compilatore non si lamenterà.
Ma non lo facciamo in quanto sarebbe ridondante.
Il modificatore pubblico è facoltativo.
Tutto no.
Solitamente si vedrebbero soprattutto le interfacce pubbliche in modo che abbiano il modificatore pubblico.
Sappiamo che se escludiamo il modificatore pubblico significa che l'interfaccia è visibile solo all'interno del pacchetto.
Quindi questo è l'accesso predefinito che è attivo.
Sottoscrivi l'accesso privato del pacchetto come qualsiasi altro modificatore di accesso in una dichiarazione dell'interfaccia.
E questo è un caso con il pilastro.
Quindi prenota una classe un'interfaccia.
Come su predefinito sono i livelli di accesso pubblico.
Questo non è un accesso privato o particolare.
Quindi rimettila nella tua mente.
Le classi sulle interfacce possono solo come impostazione predefinita l'accesso pubblico Slavin non viene a un'interfaccia
e come può includere variabili costanti statiche che sono variabili dichiarate ret static sui modificatori finali in modo
da poter evidenziare anche variabili argomento limitate.
Ma tieni presente che le interfacce non possono come.
Le variabili di istanza sono specificate in precedenza.
E come discusso in precedenza, può anche includere metodi astratti.
Questo è Michael Swit di nessuno.
Abbiamo anche detto che prima di Java 8 erano solo metodi astratti ma dall'8 luglio in poi un'interfaccia può anche vedere
come tutti i metodi greci come vedremo in seguito.
Ma generalmente ci si può aspettare che contengano solo metodi astratti anche le variabili statiche non
sono comunemente viste nelle interfacce.
Quindi forse un aiuto Java un'interfaccia era considerata al cento per cento pura astrattezza.
Questo includerebbe solo metodi astratti.
Tuttavia, con le interfacce dell'8 luglio è possibile anche come alcune implementazioni sotto forma di qualcosa chiamato metodi
predefiniti e statici, diversamente dai metodi astratti, questi metodi sarebbero importanti per i corpi.
Cioè sono metodi concreti.
Quindi da Dhaba 8 in poi le interfacce non sono più al 100 percento le classi astratte pure che iniziano
i metodi sono proprio come i moti statici di Binoy e più avanti vedranno perché questi nuovi tipi
di metodi sono stati inseriti in Java 8.
Infine le interfacce possono anche includere X annidato che significa che può includere classi nidificate sono interfacce annidate sono tipi che
sono stati discussi in una sezione separata, quindi non preoccupiamoci per ora.
In generale, per lo più gli argomenti astratti sono gli unici in cui si vedono interfacce poco evidenti enfatizzate nel
colore rosso e la luce a volte si possono vedere altri membri come metodi diversi o variabili finali
statiche ma il più delle volte sarebbero metodi astratti.
Si noti inoltre che tutti questi membri su un'interfaccia sono implicitamente pubblici, quindi non è necessario
specificare esplicitamente il modificatore pubblico.
In caso di metodi astratti anche il modificatore astratto è implicito e quindi può essere omesso.
E qui ecco la dichiarazione dell'interfaccia di esempio per il nostro requisito.
Quindi abbiamo l'interfaccia con il nome sparabile, il metodo astratto recupera i dati degli oggetti.
Poiché è un metodo astratto, non ha alcuna implementazione e termina con un punto e virgola,
ma l'abstract del modificatore viene omesso poiché è implicito.
Come ho già detto in precedenza, il modificatore pubblico può anche essere omesso poiché è implicito per qualsiasi membro
di un'interfaccia e in quanto questione di stile è scoraggiato a specificare esplicitamente i modificatori predefiniti.
Quindi non includiamo i modificatori predefiniti nel codice che scriviamo anche se non ci
sono variabili in questo esempio, qualsiasi variabile dichiarata in un'interfaccia è per impostazione predefinita come statica.
Quindi ancora una volta non devi concludere l'espressività di questi modificatori.
Come accennato in precedenza, tutti i membri dell'interfaccia sono pubblici per impostazione predefinita.
Quindi, indipendentemente dal fatto che si tratti di un metodo variabile o di una classe nidificata o un'interfaccia nidificata, per impostazione predefinita
avrebbe un livello di accesso pubblico.
Non è possibile utilizzare modificatori privati o protetti che interfacciano i membri.
Possono come solo i livelli di accesso pubblico.
Quindi puoi quindi chiedere che cos'è l'accessibilità solo all'interno del pacchetto.
E quello che succederebbe è che l'interfaccia stessa ha un accesso predefinito che il suo modificatore pubblico
è omesso dalla dichiarazione dell'interfaccia e che il livello di accesso pubblico dei membri dell'interfaccia non è più applicabile.
E quei membri non sono visibili al di fuori del pacchetto.
Quindi, in pratica, il livello di accesso pubblico dei membri viene sostituito dal livello di accesso
predefinito specificato nella dichiarazione dell'interfaccia.
Ma generalmente vedrai le interfacce su come il livello di accesso pubblico
sia importante anche come le cuffie.
Ecco come lavori su un'interfaccia per le classi.
Sappiamo che gli estensori della tastiera usati per l'interfaccia useranno la parola implements.
Quindi nel nostro esempio abbiamo comprato libri su lezioni di wabbling che avrebbero implementato la condivisione e avrebbero fornito
le loro implementazioni per ottenere che io possa leggere omet e le classi di libri estendono ancora la classe dei segnalibri.
Non che il multiclasse estenderebbe Brookbank ma non implementerà la condivisione.
Poiché sappiamo che non dovrebbe essere condiviso con un partner o un sito web in relazione alle estensioni delle
parole chiave sugli attrezzi.
Semanticamente anche questo ha senso, ad esempio la parola chiave implementa suggerisce che una classe sta
per implementare i metodi astratti dichiarati in un'interfaccia.
Ma la parola chiave X10 suggerisce che una classe estenderà la funzionalità di una superclasse
che erediterà il metodo concreto ma fornirà anche l'implementazione per i metodi
astratti.
E naturalmente può anche aggiungere alcuni nuovi metodi.
Estendendo così la funzionalità duck è la dichiarazione di classe che include sia estensioni che implementazioni squaw
e quindi implementa la classe deve sempre seguire la classe extents.
Altrimenti si ottiene un errore di compilazione.
Puoi anche ascoltare istanze in cui la classe implementa solo una o più interfacce ma non estende alcuna
classe e questa è una possibilità.
Quindi, ecco il diagramma di Newgrounds ma prenotate le classi Roblin implementando l'interfaccia condivisibile
per fornire implementazioni per ottenere elementi che ometer ereditarietà multiplo non è più un problema ora poiché
solo un segnalibro di classe viene esteso mentre l'altro è l'interfaccia.
Solo una breve nota sulla notazione qui.
Dato che abbiamo in questo diagramma di classe qualcosa di nuovo, indica un'interfaccia usando l'interfaccia per le
parole chiave sul nome dell'interfaccia.
Inoltre, la relazione degli attrezzi è indicata usando la linea tratteggiata ma, per esempio, la
relazione sarà sempre una linea continua riguardante l'ARO alla fine della linea tratteggiata.
A rigor di termini deve essere chiuso come un triangolo e ciò vale sia per l'interfaccia che
per la relazione extenso.
Ma questo è semplicistico per questa notazione.
Quindi, usando l'interfaccia abbiamo raggiunto il nostro obiettivo, fare solo delle chiacchiere sulle classi del libro
hanno la capacità condivisibile, ma sono solo queste due classi che definiscono che l'elemento get non ha un protocollo comune come definito.
Siamo l'interfaccia condivisibile.
Questo protocollo comune non si applica alla classe film in quanto non implementa l'interfaccia shittim così condivisibile
che definisce le funzionalità opzionali di cui il weblink e la book necessitano.
Fornisce anche un protocollo comune sulla bellezza qui è che otteniamo anche i benefici polimorfici dell'eredità multipla che
è un esempio di arte che un oggetto libro può ora essere assegnato a una variabile di tipo merker
di riferimento.
Oltre al gradevole tipo di riferimento di riferimento, il libro Class è un sottotipo di merda proprio come il
sottotipo di tutti i libri di Marcus.
Quindi una classe che implementa un'interfaccia è un sottotipo di tale interfaccia.
Quindi Book Book e Webling.
Oltre ad essere un libro sul balbettio ci sono anche altri due tipi che sono condivisibili e condivisi e questo
non è possibile e spostare l'oggetto non può essere assegnato a una variabile del tipo merda Habel
in quanto non implementa shittim.
Cioè non è un sottotipo spesso condivisibile.
Tieni presente che anche questo non è possibile in quanto un'interfaccia non è intangibile a cui un'interfaccia
può essere referenziata e non può mai essere un tipo di oggetto.
OK, quindi tutti noi lo ricordiamo.
Non che in generale quel downpipe sia spesso usato per riferirsi a una classe o un'interfaccia in questa diapositiva mostra un esempio
in cui un'interfaccia viene usata come un barometro del metodo.
Quindi, qui il metodo è condivisibile come un tipo di parametro del metodo e può essere invocato
passando gli oggetti book o Roebling ma non più oggetti su Witan.
Convincili ad ammettere che viene invocato su di loro al parametro.
Quindi se l'oggetto viene passato, viene invocata la sua versione del metodo Get item.
Allo stesso modo, se viene passato l'oggetto eyeblock, allora il motion off esce solo per entrare di più.
Quindi è proprio come nel caso di usare una superclasse come parametro di metodo.
Quindi quello che stai vedendo qui è essenzialmente il polimorfismo.
Come accennato in precedenza, una classe può essere una sottoclasse di più interfacce.
Questo è un classico e implementa più interfacce come puoi vedere qui.
La classe del libro implementa merda un toro così come un'altra carta di interfaccia comunemente usata comparabile.
Questo è da Java ho comprato il pacchetto Lang e guarderò questa interfaccia in seguito
le interfacce sono semplicemente comorbilità e possiamo anche avere più interfacce.
Che cosa significa anche la classe o quali diritti il metodo astratto rispetto al quale è definito
da un'interfaccia comparabile implementando comparabili e Dauphiness una classe annuncia che i suoi oggetti possono essere confrontati tra
loro ed è utile quando vogliamo archiviare quegli oggetti in un certo ordine e questa interfaccia
sarà discussa più tardi.
Ora, per chi guarda questa definizione di classe quando guarda l'interfaccia comparabile nella parte
di dichiarazione istantaneamente, sa che gli oggetti di questa classe possono essere comparabili l'uno
con l'altro.
Ora puoi riferirlo a un dottore che ha diversi gradi.
I gradi sono le interfacce.
Solo guardando i gradi conosciamo le capacità del dottore.
Questo è esattamente il caso qui.
Solo guardando le interfacce del libro una dichiarazione sappiamo che qualsiasi oggetto libro offre le capacità o
essere condiviso e confrontare un altro oggetto libro può anche essere assegnato a una variabile il cui tipo è comparabile.
Quindi, implementando classi comparabili offrendo una nuova capacità comparabile.
Questa è l'introduzione principale alle interfacce.
Solo per riassumere
Un'interfaccia è semplicemente un puro contratto ed è molto più generica di anche classi astratte.
Non ha nemmeno lo stato quindi è solo una specifica di altissimo livello che le sottoclassi implementerebbero.
Ci sono alcune cose più importanti di cui abbiamo bisogno per discutere sulle interfacce e lo faremo
nella prossima lezione.
Dopo ciò li stavamo facendo fuori tutto ciò che abbiamo imparato.
Grazie.