1
00:00:01,070 --> 00:00:03,460
Ciao, questo è il numero romano.

2
00:00:03,550 --> 00:00:06,350
Ora diamo un'occhiata alle classi anonime.

3
00:00:06,450 --> 00:00:12,480
Vedremo anche come viene utilizzato in pratica e estenderemo la demo precedente per questo in

4
00:00:12,510 --> 00:00:13,760
questa conferenza.

5
00:00:15,410 --> 00:00:19,760
Una classe anonima come suggerisce il nome è fondamentalmente anonima.

6
00:00:19,760 --> 00:00:24,220
Questo è che non ha nessuno per capire la classe anonima.

7
00:00:24,280 --> 00:00:28,740
Consideriamo questo costruttore di Cresap che prende come input un concorrente.

8
00:00:29,080 --> 00:00:34,980
E sappiamo che il concorrente ha un'interfaccia che ha il confronto del metodo astratto che conosciamo rispetto

9
00:00:35,050 --> 00:00:39,780
agli argomenti e aiuta a mantenere l'ordine di selezione in tal senso.

10
00:00:40,680 --> 00:00:45,700
Sappiamo che possiamo definire Garces concreti che implementerebbero l'interfaccia della concorrenza.

11
00:00:45,890 --> 00:00:52,290
Tuttavia, possiamo anche utilizzare classi anonime per implementare l'interfaccia di confronto.

12
00:00:52,360 --> 00:00:54,230
Ed ecco come è fatto.

13
00:00:54,280 --> 00:01:00,190
Stiamo creando un'istanza di Chrisette e l'argomento del costruttore di reset è un'istanza di

14
00:01:00,190 --> 00:01:04,340
una classe anonima che sta implementando l'interfaccia della concorrenza.

15
00:01:04,540 --> 00:01:10,420
Dal momento che stiamo creando un'istanza l'argomento nei gruppi la nuova parola chiave che è

16
00:01:10,420 --> 00:01:17,080
seguita dalla dichiarazione di classe anonima che inizia con un concorrente M ed è seguita da parentesi

17
00:01:17,080 --> 00:01:24,120
vuota mentre stiamo creando un'istanza di loro parentesi è seguita dal corpo reale di la classe anonima che inizia.

18
00:01:24,130 --> 00:01:31,540
E quindi è proprio come una normale classe o interfaccia e all'interno del corpo viene fornita l'implementazione per

19
00:01:31,540 --> 00:01:39,720
il metodo Compare che utilizza la lunghezza delle stringhe di input come criterio di ordinamento, come potete vedere qui non c'è

20
00:01:39,720 --> 00:01:42,080
un nome di classe separato.

21
00:01:42,360 --> 00:01:48,840
Stiamo utilizzando il nome dell'interfaccia concorrente Ritchson che implicherebbe di per sé che stiamo

22
00:01:48,870 --> 00:01:50,700
implementando un'interfaccia concorrente.

23
00:01:51,060 --> 00:01:56,330
Quindi la classe anonima è diversa dalla nostra regolare implementazione dell'interfaccia.

24
00:01:56,340 --> 00:02:01,680
VB avrebbe un nome di classe seguito dalla parola chiave implements che a sua volta sarebbe

25
00:02:01,680 --> 00:02:03,190
seguita dal nome dell'interfaccia.

26
00:02:04,830 --> 00:02:11,700
Quindi possiamo vedere che con una classe anonima la stiamo dichiarando e istanziando al punto

27
00:02:11,700 --> 00:02:14,520
di utilizzo e possiamo farlo ovunque.

28
00:02:14,530 --> 00:02:20,570
Un'espressione è legale ma di solito è usata come argomento di metodo come vediamo qui.

29
00:02:20,590 --> 00:02:25,380
Nota che il tuo concorrente è un'interfaccia ma può anche essere di classe.

30
00:02:25,900 --> 00:02:32,050
E se questa classe include un parametro di costruzione, la dichiarazione della

31
00:02:32,050 --> 00:02:39,610
classe anonima può richiamare il costruttore passando gli argomenti necessari che verrebbero specificati tra parentesi.

32
00:02:39,670 --> 00:02:47,230
Quindi questa intera espressione che abbiamo qui può essere letta come un oggetto di una classe anonima

33
00:02:47,290 --> 00:02:50,870
ereditata da un concorrente e sotto il cofano.

34
00:02:50,870 --> 00:02:53,570
Questo è esattamente ciò che sta accadendo.

35
00:02:53,570 --> 00:02:59,780
Quello è il compilatore creerà una classe di toplevel separata corrispondente alla classe anonima e quella classe

36
00:02:59,780 --> 00:03:04,010
implementerebbe il codice di byte del suono dell'interfaccia della concorrenza.

37
00:03:04,040 --> 00:03:10,090
Non esiste e solo la classe nidificata deve essere rappresentata da una classe di livello superiore.

38
00:03:10,120 --> 00:03:16,180
Come menzionato in precedenza, tali classi anonime che vengono create come classi di livello superiore dovrebbero avere nomi di classe

39
00:03:16,180 --> 00:03:20,000
come il dollaro esterno esaurito o il dollaro e così via.

40
00:03:20,100 --> 00:03:26,050
Questo è il nome della classe unclosing sotto il nome della classe che sarebbe seguita

41
00:03:26,320 --> 00:03:33,370
dall'implementazione o dall'eccellenza di Hiebert a seconda che la classe anonima stia ereditando da un'interfaccia o da una classe.

42
00:03:33,850 --> 00:03:35,950
Quindi in realtà non c'è abbastanza classe.

43
00:03:35,980 --> 00:03:42,700
Sarebbe implicitamente rappresentato dal fatto che la classe inferiore della classe superiore sarebbe istanziata nella

44
00:03:42,700 --> 00:03:44,050
classe superiore.

45
00:03:44,050 --> 00:03:48,070
Questo vale per tutte le master class e non solo e su base MUST.

46
00:03:48,220 --> 00:03:55,330
È solo che con altre classi gnostiche il nome della classe nidificata sarebbe il nome della classe esterna dollaro

47
00:03:55,390 --> 00:04:03,330
in un nome di classe, ma con la classe anonima sarebbe il nome di una classe esterna Dollaro un numero un uso

48
00:04:03,330 --> 00:04:07,580
comune delle classi anonime è per la creazione di oggetti funzione.

49
00:04:07,740 --> 00:04:13,440
L'implementazione della concorrenza che abbiamo appena visto era un esempio di oggetto funzione e un

50
00:04:13,470 --> 00:04:15,820
oggetto funzione ha due proprietà associate.

51
00:04:17,250 --> 00:04:21,810
Uno è che i suoi metodi operano su altri oggetti.

52
00:04:21,840 --> 00:04:28,500
Quindi quello sarebbe un oggetto funzione che non soddisfa i parametri sono altri oggetti in un'implementazione

53
00:04:28,500 --> 00:04:29,260
competitiva.

54
00:04:29,280 --> 00:04:38,020
E la notte precedente in cui il concorrente ha operato anche in putzing, la seconda proprietà ottiene che un

55
00:04:38,170 --> 00:04:41,480
oggetto funzione esporta solo un metodo.

56
00:04:42,040 --> 00:04:47,830
Quindi un oggetto funzione è fondamentalmente un'istanza di un tubo con queste due proprietà.

57
00:04:47,830 --> 00:04:52,270
E il tipo può essere una classe o un'interfaccia se è un'interfaccia.

58
00:04:52,420 --> 00:04:59,410
Ci riferiamo all'interfaccia come interfaccia funzionale abbiamo brevemente discusso l'interfaccia funzionale nel capitolo quando si

59
00:04:59,590 --> 00:05:02,350
parla di mugger di default.

60
00:05:02,460 --> 00:05:05,460
Quindi un'interfaccia competitiva è anche un'interfaccia di funzione.

61
00:05:05,860 --> 00:05:11,930
Tuttavia fa come più di un metodo puoi vedere nelle specifiche API del concorrente.

62
00:05:12,480 --> 00:05:17,670
Ma si qualifica ancora come interfaccia funzionale in quanto ha solo un confronto di metodo astratto.

63
00:05:17,790 --> 00:05:24,240
Ha anche un'altra questione astratta uguale alle sottoclassi di Butson che ereditano il metodo di uguaglianza.

64
00:05:24,240 --> 00:05:30,610
Per loro la classe dell'oggetto l'interfaccia competitiva sarebbe comunque considerata come un'interfaccia opzionale.

65
00:05:31,500 --> 00:05:35,940
Quindi gli oggetti funzione possono essere implementati come classi anonime.

66
00:05:36,000 --> 00:05:40,260
Possono anche essere implementati tramite espressioni lambda di cui parleremo più avanti.

67
00:05:42,340 --> 00:05:48,100
Questo uso dell'uso di classi anonime per oggetti funzione è raccomandato anche in questo

68
00:05:48,130 --> 00:05:56,650
articolo per lui o per Kujawa che dice usa oggetti funzione per rappresentare strategie come nel modello Strategia nel nostro esempio

69
00:05:56,650 --> 00:06:03,610
nella diapositiva precedente che il metodo comparato ha definito la strategia di comparazione lunghezza delle stringhe di

70
00:06:03,610 --> 00:06:07,110
input per risolvere gli elementi della creatura.

71
00:06:07,440 --> 00:06:09,590
OK, questa era la strategia.

72
00:06:09,830 --> 00:06:14,210
E possiamo usare altre classi anonime per dichiarare altre strategie.

73
00:06:14,210 --> 00:06:20,720
Il concorrente di per sé sarebbe indicato come interfaccia di strategia e le classi anonime che lo

74
00:06:20,720 --> 00:06:23,730
implementano sarebbero le classi di strategia concrete.

75
00:06:24,530 --> 00:06:30,740
Quindi le classi anonime sono utili per definire gli oggetti funzione mentre le classi membro non

76
00:06:30,740 --> 00:06:37,610
statiche che abbiamo visto in precedenza sono valide per la definizione dell'adattatore in quella demo che costruiremo SHOCKLEE

77
00:06:37,610 --> 00:06:41,710
Bubel implementerà un oggetto funzione utilizzando un Gus anonimo.

78
00:06:41,720 --> 00:06:45,820
Non consideriamo le migliori pratiche quando si lavora con classi anonime.

79
00:06:45,900 --> 00:06:50,380
Uno è che le definizioni di classi anonime dovrebbero essere sparate con scadenze inferiori.

80
00:06:50,830 --> 00:06:53,320
Altrimenti influenzerà la leggibilità.

81
00:06:53,320 --> 00:06:56,720
Questo è effettivamente raccomandato e ho intenzione di fare un Java efficace.

82
00:06:57,030 --> 00:07:03,060
Sulla precedente su oggetti funzione Wallstrom elemento 21 da fare e consiglia anche.

83
00:07:03,060 --> 00:07:10,100
Un'altra cosa che sappiamo che le classi anonime sono dichiarate non sono istanziate nel punto di utilizzo.

84
00:07:10,270 --> 00:07:16,740
Quindi un oggetto anonimo viene creato ogni volta che viene eseguita un'espressione di classe anonima.

85
00:07:17,120 --> 00:07:23,470
E se l'espressione verrà eseguita frequentemente, creeremo anche oggetti che potrebbero

86
00:07:24,210 --> 00:07:26,190
essere molto costosi.

87
00:07:27,570 --> 00:07:35,490
In questi casi possiamo usarlo ma leggo statico final free o dichiaro e istanziamo la classe anonima come

88
00:07:35,610 --> 00:07:36,910
vediamo qui.

89
00:07:37,440 --> 00:07:44,860
Ma questo unico oggetto anonimo verrà creato e possiamo riutilizzarlo semplicemente usando la sensazione.

90
00:07:44,980 --> 00:07:52,060
In questo caso possiamo passare il nome del file SDR sottolineato il concorrente underscore lunghezza

91
00:07:52,060 --> 00:07:59,950
come argomento al costruttore greco non che l'argomento pipe sulla destra è sottolineato finanziamento indiretto e questo

92
00:07:59,950 --> 00:08:02,720
perché non può essere dedotto.

93
00:08:02,740 --> 00:08:08,400
Nel caso di un processo onesto in cui la posizione del diamante non funziona con un processo

94
00:08:09,630 --> 00:08:15,090
on-must, non funziona in Bargello 7 l'8 luglio e potrebbe essere supportato in future missioni.

95
00:08:16,110 --> 00:08:21,140
Si noti inoltre che la fine della classe anonima in questo caso è seguita da un punto e virgola.

96
00:08:21,230 --> 00:08:24,920
Ecco perché qui abbiamo una dichiarazione in piena regola.

97
00:08:25,180 --> 00:08:26,500
Quindi è richiesto il punto e virgola.

98
00:08:28,110 --> 00:08:34,590
Un altro vantaggio di questo approccio è che possiamo anche avere un bel nome descrittivo per il

99
00:08:34,600 --> 00:08:41,100
campo che indica Vawter e sulla clausola must in realtà qui SDR sottolinea che il concorrente underscore

100
00:08:41,100 --> 00:08:46,860
fa che il confronto è basato sulla lunghezza delle stringhe di input che altre strategie

101
00:08:46,860 --> 00:08:49,820
possono essere rappresentato con altri nomi descrittivi.

102
00:08:49,950 --> 00:08:57,460
Non che una classe anonima possa accedere alla classe che lo include se e solo se la classe anonima di

103
00:08:57,460 --> 00:09:05,150
cursing e non-strike contestualizza cosa vuol dire se la classe anonima è dichiarata all'interno di un metodo statico allora non

104
00:09:05,660 --> 00:09:11,090
sarebbe possibile per la classe anonima accedere ad un membro di istanza della classe

105
00:09:11,090 --> 00:09:12,690
che lo contiene.

106
00:09:12,700 --> 00:09:16,540
Non avrà accesso all'oggetto di classe che lo contiene.

107
00:09:16,680 --> 00:09:19,650
Questo perché è dichiarato all'interno di un magor statico.

108
00:09:19,860 --> 00:09:24,230
Ma se è dichiarato in un metodo di istanza, non sarebbe un problema.

109
00:09:24,480 --> 00:09:26,020
Questo è l'oggetto di classe anonimo.

110
00:09:26,040 --> 00:09:26,750
Cosa come.

111
00:09:26,760 --> 00:09:31,200
Accesso all'oggetto che racchiude mantenendo un riferimento nascosto.

112
00:09:31,440 --> 00:09:37,380
Proprio come nel caso di una classe membro non statica, Hensick sarà in grado di accedere al membro

113
00:09:37,560 --> 00:09:38,640
dell'istanza dell'oggetto esterno.

114
00:09:40,400 --> 00:09:46,500
Come dice Anonimo senza nome, non può essere chiamato costruttore.

115
00:09:46,620 --> 00:09:52,720
Tuttavia può avere un inizializzatore di istanza per inizializzare qualsiasi variabile.

116
00:09:52,720 --> 00:09:57,940
Ora andiamo avanti e facciamo un breve periodo di pausa e sul necessario incrocio ritorneremo e

117
00:09:57,940 --> 00:09:59,330
vedremo alcune limitazioni.

118
00:09:59,320 --> 00:10:04,260
Off and on the must process ok in tutti loro.

119
00:10:04,260 --> 00:10:08,630
Estenderemo il programma di cassa che abbiamo scritto la volta precedente.

120
00:10:08,780 --> 00:10:13,420
OK, avevamo i contanti e avevamo anche dei segnalibri per mantenere il denaro contante.

121
00:10:14,290 --> 00:10:19,730
Ora una cosa che ho fatto qui e il segnalibro è che ho aggiunto questa nuova variabile di istanza chiamata valutazione.

122
00:10:19,790 --> 00:10:21,970
Prima avevamo l'ID e il titolo.

123
00:10:22,240 --> 00:10:29,430
Quindi stiamo introducendo la classificazione e ha anche metodi incerti getter e gli encashed sono Java.

124
00:10:29,740 --> 00:10:35,950
Si può ricordare che stavamo creando tutti questi segnalibri e aggiungendoli alla cache che lo stava

125
00:10:35,950 --> 00:10:37,580
memorizzando in un segnalibro.

126
00:10:37,720 --> 00:10:39,080
OK, questa è la cache.

127
00:10:39,250 --> 00:10:40,880
Quindi qui stiamo impostando quella valutazione.

128
00:10:40,930 --> 00:10:47,610
Quindi è solo colpito per il primo oggetto o ne fa uno per il secondo due tre quattro e cinque.

129
00:10:47,750 --> 00:10:53,850
OK, così nella demo precedente abbiamo implementato un adattatore usando una classe membro non statica.

130
00:10:54,010 --> 00:10:58,630
Quindi qui useremo la classe anonima per implementare un oggetto funzione.

131
00:10:58,870 --> 00:11:04,330
In questo caso l'oggetto funzione avrebbe effettivamente cercato questi elementi.

132
00:11:04,360 --> 00:11:07,820
Questi cinque elementi nel segnalibro possono essere ordinati per valutazione.

133
00:11:07,940 --> 00:11:13,090
OK, quindi sarebbe l'oggetto funzione e useremo e dobbiamo solo essere e l'ordinamento

134
00:11:13,090 --> 00:11:15,060
sarà un ordine decrescente.

135
00:11:15,100 --> 00:11:18,570
OK, quindi usano una funzione e sulle classi.

136
00:11:18,580 --> 00:11:20,790
Quindi qui li stiamo aggiungendo.

137
00:11:20,860 --> 00:11:26,860
Quindi per poter ordinare useremo solo gli array metodo iStock cercato.

138
00:11:30,280 --> 00:11:32,650
E abbiamo bisogno di

139
00:11:35,860 --> 00:11:45,310
passare gli articoli ottenere oggetti d'arte il socket che sta implementando il concorrente ed è gentrificato.

140
00:11:45,350 --> 00:11:50,480
Quindi cerchiamo solo i segnalibri e abbiamo bisogno di una parentesi vuota.

141
00:11:52,310 --> 00:11:59,420
E aprire e chiudere la parentesi graffa e abbiamo bisogno di implementare il metodo non implementato che è comparabile.

142
00:11:59,840 --> 00:12:04,350
OK qui viene confrontato a prendere due parametri o segnalibro uno e segnalibro due.

143
00:12:04,380 --> 00:12:07,260
Quindi sarebbe un oggetto funzione.

144
00:12:07,280 --> 00:12:10,160
Quindi lasciami copiare la logica qui.

145
00:12:10,600 --> 00:12:10,970
OK.

146
00:12:10,970 --> 00:12:16,750
Quindi stiamo solo prendendo il rating e ci stiamo confrontando con il rating del secondo parametro.

147
00:12:16,850 --> 00:12:22,750
Dal momento che abbiamo bisogno di iniziare in un'equazione di ordine discendente di un altro, potresti ottenere un A meno un guadagno.

148
00:12:22,770 --> 00:12:23,630
Credo che tu non ricordi.

149
00:12:23,630 --> 00:12:28,260
Puoi semplicemente consultare le specifiche API per vedere come deve essere implementato il Compair.

150
00:12:28,700 --> 00:12:29,450
Quindi questo è tutto.

151
00:12:29,450 --> 00:12:38,520
E a parte questo qui stiamo semplicemente stampando la valutazione e prima stavamo semplicemente iterando tutti gli articoli ora sinceramente

152
00:12:38,520 --> 00:12:44,430
sarebbero in ordine discendente dai diademi di valutazione che verrebbero stampati in

153
00:12:44,430 --> 00:12:46,140
e nell'ordine inverso.

154
00:12:46,410 --> 00:12:48,830
Immagino che quello che intendo sia gestirlo è abbastanza chiaro.

155
00:12:50,210 --> 00:12:52,210
Quindi eccolo qui.

156
00:12:52,220 --> 00:12:55,670
Quindi ecco come l'output della demo precedente.

157
00:12:56,000 --> 00:13:00,450
Semplicemente stiamo semplicemente stampando tutti gli elementi nella cache dei combattenti.

158
00:13:00,590 --> 00:13:06,680
Quindi ora stiamo stampando in ordine inverso e in ordine decrescente di valutazione.

159
00:13:06,830 --> 00:13:07,060
OK.

160
00:13:07,070 --> 00:13:13,130
Ecco perché vedrai che l'hosting virtuale su un Tom-Kat che era l'ultimo in precedenza è

161
00:13:13,130 --> 00:13:14,030
veloce qui.

162
00:13:14,030 --> 00:13:17,900
Quindi ci sono visualizzati nell'ordine inverso del rating.

163
00:13:17,900 --> 00:13:25,160
Ora abbiamo anche detto che se questa parte di funzionalità qui viene segnalata per essere utilizzata

164
00:13:25,490 --> 00:13:30,150
invece di creare un oggetto ogni volta possiamo definirlo.

165
00:13:30,470 --> 00:13:32,190
La classe anonima.

166
00:13:32,370 --> 00:13:35,010
Ma lo stack Iwate è diminuito completamente.

167
00:13:35,060 --> 00:13:36,500
Quindi questo è quello che stiamo facendo qui.

168
00:13:36,560 --> 00:13:41,750
Quindi il tipo di riferimento è stato eliminato dal segnalibro e stiamo usando un nome descrittivo che

169
00:13:41,780 --> 00:13:45,760
indica il concorrente di underscore e il resto del codice è simile.

170
00:13:45,820 --> 00:13:46,320
OK.

171
00:13:47,490 --> 00:13:54,740
Quindi immagino che la sola cosa sia solo per mostrarti ragazzi che ho incluso anche questo blocker di inizializzazione dell'istanza.

172
00:13:54,920 --> 00:13:56,160
OK.

173
00:13:56,190 --> 00:14:03,700
E ricorda che qui c'è questo punto e virgola perché questa è una normale dichiarazione.

174
00:14:03,750 --> 00:14:07,770
OK, lasciatemi commentare qui.

175
00:14:09,630 --> 00:14:17,330
Ed ecco come questo invocare il metodo saut di usare quella valutazione sottolinea il campo competitivo sull'output

176
00:14:17,350 --> 00:14:19,690
sarebbe ancora lo stesso.

177
00:14:20,060 --> 00:14:25,360
È solo che qui abbiamo l'inizializzatore dell'istanza visualizzato perché ho una dichiarazione di stampa qui.

178
00:14:25,710 --> 00:14:27,460
OK, eccolo qui.

179
00:14:27,600 --> 00:14:30,560
Quindi non possiamo non avere un costruttore qui chiamato costruttore.

180
00:14:30,570 --> 00:14:35,660
Possiamo solo avere inizializzatori di istanza che inizializzano alcune variabili.

181
00:14:35,820 --> 00:14:38,940
Ora oltre a questo il terzo che voglio mostrare è qui

182
00:14:42,710 --> 00:14:45,170
che ho creato una classe chiamata foobar.

183
00:14:45,200 --> 00:14:52,490
Ha una variabile d'istanza variabile protetta y su foobar è una classe e ha un costruttore che

184
00:14:52,610 --> 00:14:57,590
intraprende un intervallo X e semplicemente firma y con X.

185
00:14:57,710 --> 00:15:08,700
OK, questo è solo sicuro che possiamo anche averne una classe anonima per implementare una classe.

186
00:15:08,710 --> 00:15:10,360
Quindi questo è quello che stiamo facendo qui.

187
00:15:11,430 --> 00:15:13,800
Foobar e stiamo passando per te.

188
00:15:13,890 --> 00:15:20,910
Quindi stai invocando un costruttore di foobar che il valore 5 e abbiamo questo metodo chiamato Go.

189
00:15:21,000 --> 00:15:21,700
OK.

190
00:15:21,930 --> 00:15:24,450
E qui stiamo semplicemente stampando il valore della vita.

191
00:15:24,480 --> 00:15:28,650
Quindi, perché un prodotto, ad esempio, è variabile nella baracche del fallo.

192
00:15:28,830 --> 00:15:31,550
OK lascia che ti riporti qui.

193
00:15:31,630 --> 00:15:32,850
Ecco qui.

194
00:15:33,010 --> 00:15:36,180
E questo è il costruttore e questa è la variabile.

195
00:15:36,210 --> 00:15:40,880
Quindi torniamo indietro e puoi vedere che viene creata un'istanza.

196
00:15:40,980 --> 00:15:41,610
OK.

197
00:15:41,790 --> 00:15:44,210
A questo punto un buon metodo non è ancora stato invocato.

198
00:15:44,370 --> 00:15:47,890
Quindi stiamo mettendo un operatore punto qui e stiamo invocando il capo.

199
00:15:48,270 --> 00:15:55,200
Quindi potrebbe sembrare un po 'strano l'affermazione, ma stiamo semplicemente creando un oggetto di foobar e

200
00:15:55,680 --> 00:16:04,640
stiamo cercando di eseguire la metrica, quindi lascia che ti accada anche come puoi vedere che è stata Dinda come ti piace.

201
00:16:04,670 --> 00:16:08,930
OK, quindi si tratta di ereditare da una classe.

202
00:16:09,140 --> 00:16:17,240
Ora nella demo precedente avevamo la classe membro statica, che era il mio caso

203
00:16:17,750 --> 00:16:20,990
dopo che implementava l'interfaccia cashola.

204
00:16:21,010 --> 00:16:22,230
Ora dentro questo.

205
00:16:22,270 --> 00:16:28,300
Quindi, come ho commentato questo, ho commentato tutto questo, so come tutto questo ha funzionato in precedenza

206
00:16:28,370 --> 00:16:33,370
e l'hanno fatto alla mia terza volta stavamo creando un'istanza di questa particolare classe

207
00:16:33,370 --> 00:16:35,170
e stavamo riuscendo a ottenerla.

208
00:16:35,450 --> 00:16:41,670
Ma ora volevo solo dimostrare che possiamo anche implementarlo come classe anonima.

209
00:16:41,680 --> 00:16:43,470
Quindi dentro quello lo ha fatto.

210
00:16:44,200 --> 00:16:50,600
Puoi vedere quella directory creando un'istanza dell'interfaccia skosh iterator.

211
00:16:50,860 --> 00:16:54,370
Perché questa è una classe anonima e abbiamo lo stesso corpo qui.

212
00:16:54,970 --> 00:16:57,450
E lo stiamo assegnando ai contanti.

213
00:16:57,460 --> 00:17:00,110
Un regista questo è un tipo di riferimento.

214
00:17:00,280 --> 00:17:05,860
Quindi non c'è più Mike che avrei dovuto fare come è stato sostituito ma questo e questo è quello che abbiamo.

215
00:17:05,910 --> 00:17:10,430
Quindi è già lì e l'abbiamo già eseguito.

216
00:17:10,530 --> 00:17:12,140
Quindi sta funzionando bene ora.

217
00:17:12,190 --> 00:17:21,270
Qui gli elementi sono l'ID del segnalibro in modo che possiamo vedere che possiamo accedere alle variabili di istanza degli elementi di classe che racchiudono

218
00:17:21,420 --> 00:17:23,090
come parte del denaro.

219
00:17:23,610 --> 00:17:30,300
E per fare ciò che sta succedendo sta andando a creare una classe separata per

220
00:17:30,300 --> 00:17:30,880
questo.

221
00:17:30,900 --> 00:17:36,690
Il compilatore creerà una classe toplevel separata per questo, ma il costruttore su di esso passerà

222
00:17:37,370 --> 00:17:43,470
un riferimento al riferimento dell'oggetto off cache all'oggetto Cache alla classe appena creata e solo must

223
00:17:43,470 --> 00:17:46,540
che è maggiore come una classe cappella.

224
00:17:46,830 --> 00:17:52,880
Quindi questo riferimento sarà passato e usando quello accederà agli articoli.

225
00:17:53,280 --> 00:18:02,100
Quindi se vediamo qui qui è sulla nostra scrivania, così possiamo vedere che ha creato tutte queste classi che sono presenti

226
00:18:02,110 --> 00:18:06,800
nel cast di Must Must e una cast in cast.

227
00:18:07,160 --> 00:18:08,610
Quindi volevo solo dimostrarlo.

228
00:18:08,750 --> 00:18:13,280
Quindi possiamo accedere e all'interno di quella classe utilizzerà questo riferimento.

229
00:18:13,430 --> 00:18:16,310
Userà che finirà per istruirci articoli.

230
00:18:16,370 --> 00:18:17,370
OK, questa è una cosa.

231
00:18:17,390 --> 00:18:19,880
E l'ultima cosa che voglio mostrare è.

232
00:18:20,120 --> 00:18:21,420
Quindi questo è un metodo.

233
00:18:21,440 --> 00:18:23,790
E all'interno di questo metodo lo stiamo facendo sui muskrats.

234
00:18:23,910 --> 00:18:29,180
Ora se vogliamo accedere a qualsiasi variabile locale, ad esempio, è solo che chiameremo.

235
00:18:29,450 --> 00:18:36,470
E se vogliamo semplicemente accedervi qui e in questo modo diciamo che questa variabile deve essere dichiarata

236
00:18:36,530 --> 00:18:37,330
definitiva.

237
00:18:38,310 --> 00:18:42,100
OK, deve essere definitivo entro o entro l'8 luglio.

238
00:18:42,120 --> 00:18:47,500
Deve avere questa parola chiave attributo dispositivo finale un errore di compilazione.

239
00:18:47,500 --> 00:18:52,730
Ora in Java 8 non è necessario essere definitivo ma non dovrebbe esserlo.

240
00:18:52,800 --> 00:18:57,350
Non dovrebbe essere modificato in nessun punto all'interno dello scopo di questa metrica.

241
00:18:57,530 --> 00:18:57,900
OK.

242
00:18:57,940 --> 00:19:02,570
E chiamaci semplicemente per scoprire che è ciò che significa che funziona.

243
00:19:02,700 --> 00:19:04,190
Può funzionare bene così è l'8 luglio.

244
00:19:04,200 --> 00:19:08,670
Non abbiamo bisogno della parola chiave, ma diciamo se incrementarla qui.

245
00:19:09,150 --> 00:19:14,700
Quindi dà una compilation o qui dice che la variabile locale può essere definita in uno scopo non conclusivo

246
00:19:14,790 --> 00:19:16,710
deve essere finale o effettivamente definitiva.

247
00:19:16,710 --> 00:19:18,590
Quindi possiamo farlo.

248
00:19:18,600 --> 00:19:26,790
E la ragione di ciò sembra essere solo per semplicità, perché a volte questo carattere di istanza dell'iter di cache può essere

249
00:19:27,020 --> 00:19:30,820
passato ad un altro metodo o ad un altro thread.

250
00:19:30,840 --> 00:19:32,340
E indovina quale multithreading.

251
00:19:32,730 --> 00:19:36,650
E ciò sarà eseguito in una differenza in un altro stack.

252
00:19:36,930 --> 00:19:44,790
Ma qui potremmo incrementare il valore corrente in questo modo nel qual caso potrebbe esserci la necessità di incrementare

253
00:19:44,820 --> 00:19:49,130
il conteggio e quello all'interno dell'oggetto di classe anonimo.

254
00:19:49,410 --> 00:19:53,150
Quindi quello sarebbe lo scenario che finirò probabilmente solo per semplicità.

255
00:19:53,190 --> 00:19:54,450
Non vogliono farlo.

256
00:19:54,630 --> 00:20:01,970
Quindi lo hanno reso definitivo, ma una cosa è questa che può essere restituita.

257
00:20:01,980 --> 00:20:04,010
Qui sono come in questo caso.

258
00:20:04,220 --> 00:20:07,380
Quindi ha questo effetto è una variabile di istanza.

259
00:20:07,400 --> 00:20:13,700
Se si tratta di una variabile come elementi che è una variabile di istanza nella classe di chiusura, allora va

260
00:20:13,730 --> 00:20:18,150
bene perché si accede a questi elementi usando il calore sotto gli amici.

261
00:20:18,290 --> 00:20:24,260
Ma poiché questo è un metodo locale, qui è un metodo e questa è una variabile locale nell'ambito di questa

262
00:20:24,350 --> 00:20:24,830
variabile.

263
00:20:24,830 --> 00:20:30,000
E con il metodo, ma l'oggetto stesso è un po 'lo scopo.

264
00:20:30,010 --> 00:20:34,990
E quindi non possiamo usare quello riferimento per accedere a questa variabile.

265
00:20:35,000 --> 00:20:38,420
Quindi per quella ragione ne farà una copia.

266
00:20:38,450 --> 00:20:44,890
Il compilatore farà una copia di questo codice e lo farà in modo dentale nel processo nucleare di primo

267
00:20:44,890 --> 00:20:45,930
livello che crea.

268
00:20:46,130 --> 00:20:53,040
Crea una variabile separata per il codice e ha i segni W2 che il codice Kaluga è così che

269
00:20:53,030 --> 00:20:54,760
è stato implementato internamente.

270
00:20:54,950 --> 00:20:57,500
Quindi è solo per tua informazione.

271
00:20:57,560 --> 00:20:58,460
Quindi questo è tutto.

272
00:20:58,460 --> 00:21:05,590
Ora torniamo al minimo per osservare i limiti, non le emendazioni di carburante per missili e

273
00:21:05,620 --> 00:21:06,950
sulla base.

274
00:21:07,360 --> 00:21:11,710
Uno è ovviamente non possiamo ereditare dai tipi di mercato.

275
00:21:11,830 --> 00:21:14,440
Questo è che non possiamo implementare più interfacce.

276
00:21:14,440 --> 00:21:22,160
Allo stesso modo non possiamo estendere una classe allo stesso tempo implementare un'interfaccia prossima limitazione è che lo sguardo

277
00:21:22,610 --> 00:21:29,390
che usa un oggetto anonimo può solo invocare membri che sono ereditati da un supertipo.

278
00:21:29,560 --> 00:21:36,600
È impossibile invocare tutti i membri definiti solo nella classe anonima.

279
00:21:36,750 --> 00:21:40,150
Successivamente può essere istanziato solo al punto di dichiarazione.

280
00:21:40,220 --> 00:21:40,680
Destra.

281
00:21:42,040 --> 00:21:47,570
Infine, solo la classe non può essere utilizzata in quell'istanza o in qualsiasi altro luogo.

282
00:21:47,620 --> 00:21:48,870
È richiesto un nome di classe.

283
00:21:49,860 --> 00:21:51,140
Quindi questo è tutto.

284
00:21:51,150 --> 00:21:55,860
Una classe anonima viene in genere utilizzata per implementare oggetti funzione.

285
00:21:55,860 --> 00:21:56,290
Grazie.
