Non esaminiamo i diversi metodi che possono essere parte delle interfacce a partire da Djala 8 in poi, come
discusso in precedenza nel punto 18 prima di Jowler.
Un grosso problema con le interfacce era che per loro era difficile evolversi nel tempo.
Potrebbe non essere un problema per il software proprietario, ma quando si tratta di API pubbliche
è assolutamente fondamentale farlo subito la prima volta, perché una volta che l'API è stata rilasciata e ampiamente utilizzata
è molto difficile cambiare l'API.
Clienti inaspettati
Questo è il modo per implementare anche questi cambiamenti.
Può facilmente battere il record.
Questo è stato dimostrativo nel nostro non possiamo usare ciecamente classi astratte solo perché hanno un
sacco di funzionalità per evolversi senza rompere la delimitazione del clangore con Midem sappiamo che un
dollaro non consente l'ereditarietà multipla sotto il potenziale client si estende qualche altra classe quindi
possono direttamente estendi la nostra classe astratta.
L'interfaccia di Nobody Nahlah Ayed sta andando nei gruppi, qualcosa chiamato "putter di default".
L'obiettivo principale dell'introduzione di diversi metodi era la valutazione dell'interfaccia.
Dovremmo essere in grado di aggiungere diversi metodi dopo che l'interfaccia è stata rilasciata e non dovrebbe
rompere il codice client.
Qui la compatibilità binaria implica che il fatto che i metodi precedenti siano aggiunti a un'interfaccia non
dovrebbe richiedere il completamento dell'implementazione core.
Quindi tutto deve funzionare come prima.
C'è Cline degli implementatori dovrebbe essere in grado di utilizzare i metodi così come i nuovi metodi predefiniti.
Questo sarebbe anche dimostrativo nella nostra demo.
Quindi, tieni presente che la ragione più importante per l'introduzione di metodi predefiniti è l'interfaccia alla malvagità.
Puoi anche includere prima, ma è giusto quando progetta la tua interfaccia.
La prima volta in questo senso è un metodo di interfaccia con un'implementazione predefinita in una sottoclasse in
grado di fornire un'implementazione più specifica.
Il che significa che prima non può mai essere più fine.
Questi sono i due principali vantaggi.
Ci sono un paio di altri benefici sottotitolati perché sto cercando di farli tutti solo sapere che i
metodi diversi sono anche meno comunemente chiamati metodi diversi. I creatori di estensioni di Oddworld sono noti
che cadono in campo e pensano in modo abbastanza approfondito a diversi metodi.
OK, iniziamo con quella demo e credendo che tu debba fare è assicurarti che il tuo culo faccia
riferimento all'8 luglio.
Questo perché stiamo testando i metodi che vengono introdotti a luglio e nel caso in cui tu abbia utilizzato il
7 luglio e tu non abbia Jela.
Si prega di andare avanti e scaricare Java l'ultima versione di Java 8 dal sito web dell'articolo e impostare
il percorso su Java 8.
Quindi, se tu sia come Angela e Angela hai mangiato puoi anche usare la versione combinata di Sea Java
sul prompt dei comandi per vedere quale versione di Java stai usando al momento.
Facciamo solo un riepilogo del codice, quindi estenderemo il codice che abbiamo scritto per
le interfacce Demel.
Quindi, in che modo tre interfacce hanno solo un diritto al metodo astratto di annullare l'operazione.
Il secondo è l'interfaccia essere.
Terzo è un'altra interfaccia che effettivamente lo estende.
E poi abbiamo questo astratto di implementazione kilted.
Il che significa che implementa a.
E dice che fornisce l'implementazione per uno dei metodi astratti.
E abbiamo anche un metodo concreto chiamato X che si sta estendendo in astratto e implementando ABC su
inable, che è dalla demo precedente e lo abbiamo descritto come una classe tester.
OK.
Semplicemente fa il codice e quindi diamo uno sguardo realistico ora nel nostro primo test in questa evoluzione.
Il problema che abbiamo avuto prima dell'8 luglio, quando è indissociabile, è un problema.
Quindi guardiamolo.
Quindi consideriamolo una situazione più realistica.
Supponiamo che questa interfaccia sia stata scritta da un programmatore.
Questa società chiamata ABC e nerd sai che il concreto x che sta effettivamente implementando C è scritto da
una società diversa chiamata x y z e x y z.
Quindi non ci sono due società sulle quali suppongo che il loro cliente in difficoltà sia il perché
è un'altra società che chiama un cliente che usa questa classe X.
OK.
E sta usando quel riferimento come C per istanziare la classe X, quindi è una società completamente diversa
e diversa che sta facendo uso della classe X ..
Ora supponiamo che il codice esistente che abbiamo allevato su qualcuno qui o sulla schiena ora vedo che
questo tizio della ABC vuole introdurre un nuovo metodo per andare al metodo astratto.
Quindi scrive che OK e che combina compila bene dopo.
Ma ha detto a questo ragazzo di Klein che guarda il nuovo pacchetto.
Quindi è come una nuova versione.
Destra.
Per questo motivo, non importa, intendo che il programmatore vuole iscrivere quel nuovo metodo chiamato Go uming che ha usato che
X lo ha già implementato.
Quindi vuole solo usare il nuovo metodo.
Combina questo.
Quindi ha il nuovo metodo per compilarlo e cerca di usare il numeratore.
OK è questo metodo astratto che significa che stai provando a invocare un metodo astratto.
Quindi, ciò che significa che X non ha ancora fornito una definizione per go non ha ancora fatto andare i calcoli matematici.
Quindi questo è il problema, quindi non è un grosso problema perché di solito in questi casi sono raddoppiati o in ordine.
Stiamo riscontrando questo problema durante i tempi di sviluppo e per te sai agire.
Ma il vero problema sarebbe leggere estratti o se il ragazzo che lavora presso la società X Y Z.
Quindi guarda anche al nuovo codice nella nuova libreria che ha l'interfaccia.
E lo scarica e poi vuole usare la nuova libreria a destra.
Normalmente si hanno migliori implementazioni migliori o si ottiene codice più recente, quindi vuole usare nuker.
Quindi va avanti e cerca di compilarlo e dice che sai che non hai letto una questione astratta, il che vuol dire che
sta andando, che non può usarlo e che romperà la sua corte.
Ha bisogno di usare solo la sua versione.
E quindi sicuramente sarebbe furioso per questo.
Così può e non può più usare il nuovo più recente mostrato nell'interfaccia, quindi è un problema.
Quindi è un modo poco professionale di scrivere.
Così.
Quindi la cosa è che il ragazzo che lavora per ABC ha mostrato come ha incluso questo mese il loro lungo tempo indietro.
Quindi non l'hanno progettato correttamente.
Questo è stato il problema che ha risolto il problema per lui l'8 luglio in poi.
Questo non è più un problema perché puoi creare metriche predefinite in modo da convertirlo in un
metodo concreto per renderlo diverso, basta aggiungere questa parola chiave prima che sia solo una dichiarazione che dice
di andare a vedere.
Ora basta compilare questa compilazione ricombinata.
In questo momento tutto ciò che devi fare è solo eseguire questo client a cui hai accesso Granites.
Quindi non abbiamo cambiato nulla.
Destra.
Non abbiamo compilato abbiamo compilato X dopo aver aggiunto il nuovo metodo in C ..
Quindi il metodo predefinito ci aiuta ad evolvere l'interfaccia verso la rottura del clangore.
Quindi questa è la sua bellezza.
Quindi ci chiami compatibilità binaria, il che significa che non devi ricompilare il codice di
implementazione.
OK ora vediamo se ricompiliamo X, allora andrebbe tutto bene.
OK.
E questo si chiama compatibilità con la sorgente.
Quindi se ricompili e se funziona il tuo codice funziona ancora.
La prossima compatibilità con la sorgente.
Ma sii totalmente compilatore se funziona.
Questa è la compatibilità binaria senza card.
Quindi solo due nuove cupole che puoi tenere a mente.
E sappi che prima i metodi sono metodi di istanza.
Quindi non puoi qui non puoi accedervi usando il nome dell'interfaccia stessa.
In tal modo si darebbe un errore di compilazione su file che si ha un metodo statico che vedremo in seguito.
Quindi, se lo fai, sei tu e non stai vedendo che il metodo non statico non può
essere referenziato dal contesto storico che avresti fatto.
E così hai finito con il metodo predefinito il nucleo o la dimostrazione.
Diciamo che questo beat o governatore ha detto che proviene da un'altra società e anche
questo ragazzo vuole usare un metodo come questo.
Vuole introdurre il metodo con gli stessi soldi.
Così chiama lui e lui chiama questo essere non andare.
Ora combiniamo un complesso
compilato trasformato.
Dice che la Classe X eredita le impostazioni predefinite non correlate per i tipi di crem B e C.
Quindi stiamo provando a sottoclasse: X sta implementando comprato un be c e entrambi hanno gli stessi parametri su
cui ci sono definizioni migliori.
Non sono solo matematica o dichiarazioni.
E così abbiamo il classico problema dei diamanti.
Ora, finora, c'è solo la soluzione, è necessario fornire un'implementazione qui.
Ma la cosa è che sai che non può essere il default, quindi non puoi semplicemente essere peggio nelle classi.
Possono essere per quel motivo che può essere utilizzato solo nelle interfacce, quindi dobbiamo rimuoverlo qui.
Puoi testarlo più tardi o che tipo di messaggio dà.
Così e anche questo deve essere pubblico.
Altrimenti si direbbe che questo argomento non può essere letto perché lo sei perché nell'interfaccia in cui era
pubblico qui era l'accesso predefinito, quindi è contro la regola dominante.
Quindi dobbiamo renderlo pubblico.
E facciamo in modo che x non sia questo metodo che dovrebbe essere invocato.
Quindi andiamo avanti e combiniamo questo cliente con Arnett su Prince X ottenuto.
Quindi fondamentalmente avevamo ereditarietà multiple che io sono un problema ma è stato risolto proprio qui in fase di compilazione,
Ritchson.
Quindi non viene trascinato nel runtime.
Quindi in questo senso va bene perché siamo in grado di risolverlo in fase di compilazione.
Ora voglio anche solo farti sapere che noi nel problema che avevamo era perché avevamo introdotto questo metodo di
default e B aveva lo stesso problema che avremmo come anche se fosse così astratto.
Quindi abbiamo qui questa definizione di metodo.
Ma se questo fosse astratto anche allora avremmo finito con l'errore di completamento.
OK.
In modo che anche tu puoi testarlo più tardi.
Ora facciamo qualcosa lascialo calmare e copi questo sotto questo metodo qui in astratto.
Prendi a
me renderlo pubblico ora.
Abbiamo questo.
Lasciatemi anche commentare qui OK, quindi lasciami andare avanti e compilare l'host X e compilarlo.
Non è richiesto.
Quindi lasciami solo.
Quindi tutto ciò che ho fatto è stato aggiungere un metodo con lo stesso metodo in astratto a.
E abbiamo anche il metodo predefinito di andare in C in B, ho appena commentato X, quindi ho appena commentato
il metodo go.
Il metodo override go.
Quindi hai solo due posti uno è in astratto quale x sta estendendo R e anche in C.
Quindi abbiamo un'implementazione in una superclasse su una in un'interfaccia di supporto.
Quindi vediamo cosa succede in questo caso.
Quindi è Sauti un secondo qui.
Questo doveva essere astratto.
Ma comunque quello nella versione e nella classe sta ottenendo la versione e la classe viene stampata.
Destra.
Quindi, ciò significa che il metodo nella superclasse ottiene una precedenza più alta rispetto all'interfaccia del metodo predefinita.
Quindi questa è una regola che i designer hanno piazzato.
OK, questa è una regola di risoluzione del conflitto.
Quindi sappiamo che l'oggetto superclasse principale.
Quindi, questo significa che non sono mentori diapason.
Quindi questo GLASSIE non può escludere nessuno di questi dosimetri.
A causa di ciò, la classe di incidentali che abbiamo appena visto dove la classe ha gli studenti più
alti a causa della regola di scollegamento di Doc, qualsiasi interfaccia non può mai o che cosa è giusto dall'oggetto.
Destra.
A causa di Deckert ma semanticamente ha anche senso perché diciamo ad esempio
che hai questa classe X e che stai andando a fare uso di quel metodo equals definito in oggetto.
Destra.
E poi hai il codice in caso diciamo in futuro se qualcuno come dentro o in
C qualcuno introduce un nuovo colore di materia uguale e questo è se la regola è che se è possibile sovrascrivere gli uguali in oggetto, allora
la tua semantica è rotta.
Quindi semanticamente Altace ha senso per un punto di sintassi dell'uomo anche la regola sta facendo in modo che i diversi
metodi possano sovrascrivere i metodi nell'oggetto.
OK, quindi va bene.
So che c'è un collegamento lì.
Voglio dire, crescere in questo pezzo supplementare lo ha preso e viene da mamma, ma è uno stack o
un crem Brian capre che ha una lingua o una lingua un architetto Java Language.
E spiega anche questo problema.
Quindi puoi leggere che puoi leggere i suoi commenti in modo che sia uno dei loro designer al largo 34.
Conosci tutte queste caratteristiche.
Ora la prossima cosa è come può esserci un modo per forzare x Nargeolet a usare effettivamente le parole e il
movimento in C.
Quindi vediamo se questo può essere fatto.
Sì, ciò può essere fatto ovviamente.
Il modo in cui devi farlo è che vuoi dire che vai d'arte super Daut vai normalmente sai se fare il lavoro con una
superclasse o sei un super Dargo.
Ma se vuoi invocare una questione con un metodo diverso devi farlo.
OK.
Quindi andiamo avanti ricompilare.
Lasciami correre e lavorerà su e vedremo.
Quindi tu sei come lo stiamo costringendo a farlo.
E un'altra cosa è che non puoi farlo non puoi mai farlo, il che significa che puoi accedere solo
al metodo di default di Super Interfaces Motard ma non a quello dal Super Office genitore.
In questo modo puoi accedere ai problemi di default dei nonni.
OK.
E un'altra cosa è che non puoi.
Come va il superdog qui.
Così puoi.
Quindi questa è l'interfaccia.
Non puoi avere l'obiettivo del superdog qui.
L'unica cosa che puoi avere è aiuto o supercargo.
Quindi non puoi usare solo una parola chiave super e una deformità.
Quindi volevo solo farlo notare.
Quindi due cose che ho appena menzionato.
Uno era che non puoi usare non puoi accedere a nessuna madre di nonni dalla tua.
Dovrebbe sempre andare dal genitore stesso e non puoi usare solo la parola Superguy.
Devi qualificarlo con il nome dell'interfaccia iron e anche lo stesso vale per il metodo predefinito che devi
fare lo stesso in quel formato.
Quindi non importa se si tratta di un vetro concreto o se si tratta di un metodo predefinito in un'interfaccia.
Quindi devi tenerlo a mente.
Ora esaminiamo un'altra strategia di risoluzione dei conflitti.
Nick lo combina rapidamente,
quindi lascia che ti presenti questo metodo predefinito.
Qui lasciami chiamarlo un me quando combiniamo dovrebbe essere diverso.
Così comune.
Quindi a questo punto abbiamo solo due implementazioni di una ragazza in C e un'altra in una
che vede estendere.
Quindi in questo caso è abbastanza ovvio quindi sta accedendo al culto in C ..
Quindi, ciò significa che alcuni interfacciano la versione in qualche interfaccia.
Vince OK.
Ha assunto studenti o superinterfaccia.
In precedenza abbiamo visto che la classe della sua classe o classe di interfaccia ha la sua versione e le classi assumono presidenti.
Ora la seconda regola è che il movimento nella difesa meridionale ha maggiore precedenza sul movimento e sulla
super interfaccia.
Ok, questa è la cosa giusta.
Quindi questa è una strategia di risoluzione dei conflitti.
La seconda strategia e un'altra cosa è che non puoi mai usare la parola chiave finale qui perché questi metodi
dovrebbero essere superabili e non puoi non usare anche una parola chiave sincronizzata Oger sincronizzata non
la chiama sincronizzata ma è un modificatore che vedremo in multi capitolo di discussione.
Quindi non puoi usare nessuno dei due ordini.
D: Qual è la tua altra cosa è che puoi davvero interfacciarlo per definire questa questione.
E se diciamo l'interfaccia C puoi effettivamente renderlo astratto vedi che lo sta estendendo può
effettivamente renderlo astratto.
E perché vorresti farlo.
Diciamo ad esempio il ragazzo che ha implementato un'interfaccia le cose che sono prima che
quell'implementazione ritorni e vuole forzare i suoi clienti a fornire un'implementazione.
Quindi puoi effettivamente prendere un metodo di ferro predefinito o quello che ho fatto con un abstract in cui Sure
puoi farlo.
E questo vale anche per le classi astratte: puoi avere una classe astratta che ha un
metodo concreto e la sua sottoclasse che è anche una classe astratta può effettivamente concretizzare il calcestruzzo in un
metodo astratto.
Quindi è possibile.
Oh.
Quindi questo è un prodotto che sono.