1
00:00:01,140 --> 00:00:03,370
Ciao, questo è determinato al lotto.

2
00:00:03,650 --> 00:00:09,590
Ora esaminiamo l'articolo 52 che dice riferirsi agli oggetti tramite le loro interfacce.

3
00:00:09,630 --> 00:00:15,360
Fondamentalmente, ciò che gli articoli dicono sono quando possibile tenta di usare un'interfaccia come tipo di riferimento in

4
00:00:15,690 --> 00:00:21,040
tutti i tipi di dichiarazioni variabili e anche usarli come tipi di ritorno del metodo.

5
00:00:21,420 --> 00:00:22,560
Diamo un'occhiata a un esempio.

6
00:00:23,730 --> 00:00:29,580
Consideriamo questo frammento di codice con il metodo foo che ha un singolo parametro disattivato da idlest che

7
00:00:29,910 --> 00:00:31,520
è un bus concreto.

8
00:00:31,530 --> 00:00:38,050
Il problema con questo è che non possiamo solo invocare questo metodo con un idealista che non possiamo

9
00:00:38,200 --> 00:00:40,080
passare un'altra implementazione simile.

10
00:00:41,540 --> 00:00:48,860
Tuttavia se avessimo il tipo di parametro come una lista che è un'interfaccia allora potremmo quanto velocemente sono

11
00:00:49,340 --> 00:00:51,290
de-list o se necessario.

12
00:00:51,290 --> 00:00:59,580
In futuro potremmo passare qualsiasi linguista o forse anche una lista che provenga dalla libreria Apache Commons, che sappiamo essere

13
00:00:59,580 --> 00:01:05,900
una gerarchia di ereditarietà completamente diversa, quella di Lister rispetto all'API di luglio standard.

14
00:01:06,120 --> 00:01:11,850
Ma l'oggetto che viene passato proviene da una gerarchia di ereditarietà completamente diversa

15
00:01:11,850 --> 00:01:17,800
e siamo in grado di farlo solo perché il trialista implementa l'interfaccia di lista.

16
00:01:17,800 --> 00:01:23,500
Quindi stai dicendo che un vantaggio è che possiamo cambiare le implementazioni se necessario.

17
00:01:23,500 --> 00:01:25,970
Ma perché dovremmo cambiare l'implementazione.

18
00:01:26,910 --> 00:01:32,950
Un motivo comune è che la nuova implementazione offre prestazioni migliori.

19
00:01:32,980 --> 00:01:37,370
Ovviamente conosciamo anche i vantaggi polimorfici dell'uso di un supertipo.

20
00:01:37,590 --> 00:01:44,260
Otteniamo un codice flessibile che è meno suscettibile di modifiche in quanto possiamo passare a nuovi tipi di oggetto che non ci

21
00:01:44,260 --> 00:01:46,740
sono quando il codice è stato originariamente scritto.

22
00:01:46,900 --> 00:01:51,900
OK, così possiamo passare nuove implementazioni e il codice sarà anche molto più pulito.

23
00:01:52,270 --> 00:01:58,660
Ciao mi accorgo che ora stiamo dicendo che si tratta di un cavo flessibile al posto del semplice codice

24
00:01:58,660 --> 00:01:59,290
flessibile.

25
00:01:59,560 --> 00:02:01,720
E questo perché con le interfacce.

26
00:02:01,900 --> 00:02:08,100
Gli oggetti possono provenire da qualsiasi gerarchia di ereditarietà che non è necessario che provengano dallo stesso

27
00:02:08,170 --> 00:02:09,880
albero di ereditarietà dell'interfaccia.

28
00:02:10,180 --> 00:02:16,240
Questo in genere non è possibile con il processo concreto o astratto poiché le classi sono specifiche dell'implementazione

29
00:02:16,690 --> 00:02:22,600
che non sono in genere confinate a un albero di ereditarietà che in genere non si vede

30
00:02:22,720 --> 00:02:29,530
essere senza cena in un albero di ereditarietà diverso, ma con le interfacce definiamo un contratto che è un specifica

31
00:02:29,780 --> 00:02:32,130
su Quindi è molto più generico.

32
00:02:32,260 --> 00:02:34,730
Le implementazioni possono arrivare da qualsiasi luogo.

33
00:02:36,410 --> 00:02:38,250
Esaminiamo anche un paio di eccezioni.

34
00:02:38,290 --> 00:02:45,470
Quindi dovremmo andare con le classi piuttosto che con le interfacce. Un'eccezione è quando non c'è un'interfaccia fatta

35
00:02:45,590 --> 00:02:47,210
in questo caso.

36
00:02:47,270 --> 00:02:51,400
Prova ad usare la classe meno specifica.

37
00:02:51,450 --> 00:02:58,020
Il secondo scenario è che potrebbe esserci un'interfaccia, ma potremmo dover usare una sottoclasse specifica come un

38
00:02:58,020 --> 00:03:04,890
tipo di riferimento in quanto la sottoclasse potrebbe definire un comportamento specializzato sotto la squadra motard Neech tale

39
00:03:04,890 --> 00:03:06,010
comportamento specializzato.

40
00:03:06,030 --> 00:03:11,520
In tal caso dobbiamo usare la sottoclasse come un tipo di riferimento. Quindi questo è su questo oggetto.

41
00:03:11,610 --> 00:03:17,550
Quando possibile, cerca di utilizzare un'interfaccia come tipo di riferimento, a meno che non ci siano alcune eccezioni

42
00:03:17,550 --> 00:03:19,090
come quelle indicate qui.

43
00:03:19,350 --> 00:03:19,710
Grazie.
