Tan115's picture
Add files using upload-large-folder tool
407b94e verified
Raw
History Blame Contribute Delete
17.6 kB
1
00:00:05,000 --> 00:00:10,000
Hello, dear students, in this lesson, we are going to talk with you about interfaces from this lesson,
2
00:00:10,000 --> 00:00:13,000
you learn what interfaces are and what do they consist of.
3
00:00:13,000 --> 00:00:18,000
Also, we'll discuss what is the difference between abstract class and interface.
4
00:00:18,000 --> 00:00:23,000
And at the end of the lesson, I will tell you what is the difference between such terms as interface,
5
00:00:23,000 --> 00:00:24,000
class and time.
6
00:00:25,000 --> 00:00:30,000
Let's go as I just start and look at examples to understand what interfaces are.
7
00:00:30,000 --> 00:00:36,000
First of all, let's come up with a definition of an interface interfaces, an abstraction which defines
8
00:00:36,000 --> 00:00:41,000
a behavioral contract that must be followed by every class that implements this interface.
9
00:00:42,000 --> 00:00:48,000
In other words, you specify a set of expected behavior which should be present in each class that implements
10
00:00:48,000 --> 00:00:49,000
this interface.
11
00:00:49,000 --> 00:00:53,000
But it don't specify how exactly this behavior will be implemented.
12
00:00:53,000 --> 00:00:56,000
For example, have interface here for payment processor.
13
00:00:57,000 --> 00:01:03,000
I need to have some type in my program that will be able to process payment and send information about
14
00:01:03,000 --> 00:01:04,000
our payment to Payment Gateway.
15
00:01:05,000 --> 00:01:12,000
That's why I want to declare what method with the name process payment, the text payment data object
16
00:01:12,000 --> 00:01:13,000
as an argument.
17
00:01:13,000 --> 00:01:20,000
Payment data is simple project loss that has the payment amount tax amount idea of a user who wants
18
00:01:20,000 --> 00:01:22,000
to make a payment and currency.
19
00:01:23,000 --> 00:01:25,000
The rest of the message here I just getters and setters.
20
00:01:26,000 --> 00:01:27,000
Now let's get back to our interface.
21
00:01:28,000 --> 00:01:32,000
You see that I declared method without body and without any other modifiers.
22
00:01:33,000 --> 00:01:33,000
Why?
23
00:01:34,000 --> 00:01:39,000
Because invisibly, all matters in interface have modifiers, public and abstract.
24
00:01:39,000 --> 00:01:44,000
So in case I will add here public and abstract modifier, nothing will change.
25
00:01:45,000 --> 00:01:50,000
But there is no sense in any public abstract modifiers because all methods and interfaces by default
26
00:01:50,000 --> 00:01:52,000
are public and abstract.
27
00:01:52,000 --> 00:01:58,000
I can say that this interface said the contract on the process payment behavior by same contract.
28
00:01:58,000 --> 00:02:04,000
I mean, this interface clearly defines what a return type will be, how method will be called and what
29
00:02:04,000 --> 00:02:06,000
parameters will be in it, period.
30
00:02:07,000 --> 00:02:11,000
But this interface doesn't bother about what exact code will be written.
31
00:02:12,000 --> 00:02:17,000
And now when I have such interface in my program, I can create time that will implement this contract.
32
00:02:17,000 --> 00:02:23,000
I have changed payment processor and PayPal payment processor both implements payment processor interface.
33
00:02:24,000 --> 00:02:28,000
That means these classes are obligated to implement process payment methods.
34
00:02:29,000 --> 00:02:35,000
Since this method is abstract in the interface in our concrete class, we must implement this method.
35
00:02:35,000 --> 00:02:37,000
If only our class will be abstract.
36
00:02:38,000 --> 00:02:40,000
There is no need to implement this method.
37
00:02:40,000 --> 00:02:44,000
Let me call on this method and at absolute keyword before class.
38
00:02:44,000 --> 00:02:47,000
You see, there is no compilation error.
39
00:02:47,000 --> 00:02:52,000
But since this class is not abstract, there will be compilation error.
40
00:02:52,000 --> 00:02:58,000
In case we won't implement this method, you can press control plus one and select and implemented methods
41
00:02:58,000 --> 00:02:59,000
to generate stop method.
42
00:03:00,000 --> 00:03:02,000
I will just on existing one.
43
00:03:02,000 --> 00:03:04,000
This method will work differently.
44
00:03:04,000 --> 00:03:07,000
For example, chase payment processor.
45
00:03:07,000 --> 00:03:13,000
Because of the specifics of Payment Gateway, it should obtain security token first for authorization
46
00:03:14,000 --> 00:03:19,000
and only after that we can initialize payment page with secure token and the amount of money to pay.
47
00:03:20,000 --> 00:03:26,000
On the other hand, let's pretend that PayPal payment processor needs to request payment for by using
48
00:03:26,000 --> 00:03:27,000
a specific application key.
49
00:03:27,000 --> 00:03:32,000
And after that we have to fill out this form of payment details and submit it.
50
00:03:32,000 --> 00:03:36,000
You can notice that in both cases we have override annotation here.
51
00:03:36,000 --> 00:03:40,000
This notation exists for the sake of a successful compilation.
52
00:03:40,000 --> 00:03:41,000
Do not switch the topic.
53
00:03:41,000 --> 00:03:43,000
Let's keep focus on our interfaces.
54
00:03:43,000 --> 00:03:48,000
I will tell you more about overwrite annotation in our detailed lesson about polymorphism.
55
00:03:48,000 --> 00:03:50,000
Do we see these two examples?
56
00:03:51,000 --> 00:03:55,000
The behavior is the same both classes, protests, payment data.
57
00:03:55,000 --> 00:03:57,000
But they do this in different ways.
58
00:03:57,000 --> 00:04:00,000
What do all this look like exactly?
59
00:04:00,000 --> 00:04:06,000
This look like implementation of polymorphism principle, one of the main or P principle?
60
00:04:06,000 --> 00:04:07,000
Why else?
61
00:04:07,000 --> 00:04:12,000
We need interfaces to build our application was dependency on the obstruction types, but not on the
62
00:04:12,000 --> 00:04:13,000
concrete classes.
63
00:04:14,000 --> 00:04:15,000
Let me show you this example.
64
00:04:16,000 --> 00:04:18,000
You mentioned we have some client of our code.
65
00:04:18,000 --> 00:04:22,000
It could be some other class so-called facade class or controller class.
66
00:04:22,000 --> 00:04:23,000
That doesn't matter.
67
00:04:24,000 --> 00:04:28,000
And this class can simply rely on the interface of payment processor type.
68
00:04:29,000 --> 00:04:33,000
We can say that by default, variable of payment processor reference to PayPal payment processor.
69
00:04:34,000 --> 00:04:38,000
But in fact, this client doesn't bother with implementation of payment processor.
70
00:04:38,000 --> 00:04:42,000
We will use PayPal payment processor or chase payment processor.
71
00:04:42,000 --> 00:04:48,000
Moreover, somebody can use Setar and that is a chase or PayPal payment process during the runtime.
72
00:04:49,000 --> 00:04:55,000
The good thing about interfaces and they define level of abstraction and we can build our program relying
73
00:04:55,000 --> 00:04:56,000
on this abstraction.
74
00:04:56,000 --> 00:05:01,000
They see this method and location and checkout method no matter what implementation of payment.
75
00:05:01,000 --> 00:05:08,000
Sir, I will have here during Zeron time, I don't need to change this code and also pay attention to
76
00:05:08,000 --> 00:05:09,000
one more thing here.
77
00:05:09,000 --> 00:05:16,000
I can initialize variable of interface type with a reference to an object of any other class which implements
78
00:05:16,000 --> 00:05:17,000
this interface.
79
00:05:18,000 --> 00:05:20,000
OK, Holmes, this is clear.
80
00:05:20,000 --> 00:05:23,000
Now, let's take a look what our interface can contain.
81
00:05:23,000 --> 00:05:27,000
As you already understand, our interface can contain abstract methods.
82
00:05:27,000 --> 00:05:29,000
It can have as many methods as you wish.
83
00:05:30,000 --> 00:05:34,000
But later we will learn other object oriented principles and you will understand that it is better to
84
00:05:34,000 --> 00:05:37,000
have a lot of small interfaces rather than one.
85
00:05:37,000 --> 00:05:42,000
And besides abstract methods, our interface can contain default methods.
86
00:05:42,000 --> 00:05:48,000
Default methods are methods that have body so you can treat them like regular methods in concrete glass.
87
00:05:49,000 --> 00:05:54,000
But the Java syntax wouldn't allow you to declare a method with body and interface without default.
88
00:05:54,000 --> 00:06:02,000
Keyword in case iRace the default keyword compiler tells me that abstract methods don't have money because
89
00:06:02,000 --> 00:06:04,000
compiler treats this method as abstract.
90
00:06:05,000 --> 00:06:07,000
Also, our interface may contain static methods.
91
00:06:07,000 --> 00:06:12,000
We are going to have a separate lesson about static keywords, but right now you can remember the static
92
00:06:12,000 --> 00:06:15,000
methods can be called without any object.
93
00:06:15,000 --> 00:06:19,000
So you don't need to write newcomer's and create objects.
94
00:06:19,000 --> 00:06:23,000
You can just write type name and column method like I did here.
95
00:06:23,000 --> 00:06:28,000
For example, I wrote the name of the interface and invoke static method on this interface.
96
00:06:29,000 --> 00:06:32,000
Notice I didn't use variable of payment processor type.
97
00:06:32,000 --> 00:06:33,000
I use interface.
98
00:06:34,000 --> 00:06:36,000
It is not very object oriented approach.
99
00:06:36,000 --> 00:06:40,000
Why wait for the in the most cited keywords and I will tell you more about it.
100
00:06:41,000 --> 00:06:45,000
So far, you know that interface can contain abstract default and static methods.
101
00:06:45,000 --> 00:06:48,000
What else interface can have constants.
102
00:06:49,000 --> 00:06:53,000
For example, imagine the real life scenario in case our payment failed.
103
00:06:53,000 --> 00:06:55,000
We need to retrieve a few more times.
104
00:06:55,000 --> 00:07:02,000
I create variable of type retry attempts and you probably noticed that the clips for months, this variable
105
00:07:02,000 --> 00:07:06,000
name like a constant I'm in cursive and another color.
106
00:07:06,000 --> 00:07:10,000
That is because by default, all fields and interfaces have public static.
107
00:07:10,000 --> 00:07:17,000
Final modifiers like all constants have public so that everyone could access it static because constant
108
00:07:17,000 --> 00:07:22,000
should exist in a single copy and final so that nobody could override it.
109
00:07:22,000 --> 00:07:25,000
We will talk more about constants in the lesson about static keywords.
110
00:07:26,000 --> 00:07:30,000
And even if I would add these modifiers here, nothing will change.
111
00:07:30,000 --> 00:07:33,000
But usually developers give this modifiers in interfaces.
112
00:07:34,000 --> 00:07:37,000
Let me also removed important things that we didn't discuss yet.
113
00:07:37,000 --> 00:07:43,000
If the fact that class can implement multiple interfaces at once, I'm not sure whether you notice that
114
00:07:43,000 --> 00:07:49,000
our chase payment processor implements two interfaces, the one we discussed already, and another one
115
00:07:49,000 --> 00:07:51,000
is payment for the data.
116
00:07:51,000 --> 00:07:56,000
If this class implements payment for the data interface, that means this class should implement validate
117
00:07:56,000 --> 00:08:02,000
payment methods which will validate payment to be sure that it has all necessary information for payment
118
00:08:02,000 --> 00:08:03,000
processing.
119
00:08:03,000 --> 00:08:07,000
In this payment gateway in Java, it is allowed to implement multiple interfaces.
120
00:08:08,000 --> 00:08:11,000
But in one specific case, this can lead to compilation error.
121
00:08:11,000 --> 00:08:13,000
And I want you to know this case.
122
00:08:14,000 --> 00:08:15,000
Let's discuss it.
123
00:08:15,000 --> 00:08:21,000
For example, in payment processor interface, you have some default method and in payment for the data,
124
00:08:21,000 --> 00:08:24,000
you also have default method with the same signature.
125
00:08:24,000 --> 00:08:30,000
Here it this this can lead to compilation error in chase payment processor class, because during the
126
00:08:30,000 --> 00:08:33,000
runtime it will be unclear which default method should be used.
127
00:08:34,000 --> 00:08:37,000
The one from payment for the data was the one from payment processor.
128
00:08:38,000 --> 00:08:44,000
That's why it doesn't allow us to compile this code until we resolve issue was duplicated default methods.
129
00:08:44,000 --> 00:08:47,000
So now you know really a lot about interfaces.
130
00:08:48,000 --> 00:08:53,000
It is time to understand how good you learned interfaces and ask you what is the difference between
131
00:08:53,000 --> 00:08:55,000
abstract classes and interfaces.
132
00:08:55,000 --> 00:08:59,000
Absolute class we can extend with extensive keyboard interface.
133
00:08:59,000 --> 00:09:02,000
We can implement using implements, keyboard apps.
134
00:09:03,000 --> 00:09:06,000
A class can have properties with all possible modifiers.
135
00:09:06,000 --> 00:09:11,000
On the other hand, all properties interfaces have public static final modifiers.
136
00:09:12,000 --> 00:09:17,000
You can extend only one class in Java, but you can implement multiple interfaces.
137
00:09:17,000 --> 00:09:23,000
You remember that example when our PayPal payment processor implemented two interfaces at a time?
138
00:09:23,000 --> 00:09:27,000
Basically that the most significant difference between abstract classes and interfaces.
139
00:09:28,000 --> 00:09:33,000
It is also worth to mention that the introduction of default and static methods and interfaces made
140
00:09:33,000 --> 00:09:36,000
it harder to distinguish interfaces from abstract classes.
141
00:09:37,000 --> 00:09:42,000
Based on the difference which we discussed, you can select whether you need to use abstract class or
142
00:09:42,000 --> 00:09:43,000
interface.
143
00:09:43,000 --> 00:09:48,000
For example, if you know that you need to list properties with private or protected access modifiers
144
00:09:48,000 --> 00:09:53,000
that are not static, you already know that you need to use abstract class instead of interface.
145
00:09:53,000 --> 00:09:59,000
And if you need to be able to implement specific interface together with other ones, you know that
146
00:09:59,000 --> 00:10:00,000
you need to use interfaces.
147
00:10:01,000 --> 00:10:06,000
Last but not the least question for today and our agenda is to define the difference between such terms
148
00:10:06,000 --> 00:10:11,000
as class type and interface, you already know what a class is.
149
00:10:11,000 --> 00:10:13,000
Ensure that class is a template for your future.
150
00:10:13,000 --> 00:10:19,000
Object's interface is an abstraction which defines application programming interface and contract for
151
00:10:19,000 --> 00:10:20,000
behavior.
152
00:10:20,000 --> 00:10:27,000
But what is a type probably you heard during the lessons that I use type word as a synonym when I reference
153
00:10:27,000 --> 00:10:33,000
to class interface because class is a type interface is also a type.
154
00:10:33,000 --> 00:10:39,000
That means every type is also is a class and interface and enumeration or an array.
155
00:10:39,000 --> 00:10:43,000
Also, each object has a time and every expression has a type.
156
00:10:43,000 --> 00:10:50,000
If during that interview you will be asked what a typist you can answer something like this type summarizes
157
00:10:50,000 --> 00:10:53,000
the common features of a set of objects with the same characteristics.
158
00:10:54,000 --> 00:11:00,000
Class is a concrete data structure and group of methods that represents an implementation of the type.
159
00:11:01,000 --> 00:11:04,000
Let's look at this example one more time attentively.
160
00:11:04,000 --> 00:11:10,000
Payment processor variable has payment processor type, but this variable reference to the PayPal payment
161
00:11:10,000 --> 00:11:12,000
processor object.
162
00:11:12,000 --> 00:11:15,000
So we can say that the object has a payment processor type.
163
00:11:15,000 --> 00:11:22,000
And you see here in the method parameters, this sector can accept any object of type payment processor.
164
00:11:22,000 --> 00:11:29,000
That means this method can work with any object that implements this interface doesn't make sense.
165
00:11:29,000 --> 00:11:32,000
Hope with this examples, things become clearer.
166
00:11:33,000 --> 00:11:35,000
Let's recap what we have learned today.
167
00:11:35,000 --> 00:11:42,000
In this lesson, we learned what interfaces are, what interfaces can contain inside, how to implement
168
00:11:42,000 --> 00:11:48,000
interface, what default methods and interfaces are, what static methods interfaces are.
169
00:11:48,000 --> 00:11:52,000
Now, you know what the difference between abstract class and interface is.
170
00:11:53,000 --> 00:11:56,000
And you also learn the difference between type and object.
171
00:11:57,000 --> 00:11:58,000
That's all what we have for today.
172
00:11:59,000 --> 00:12:02,000
Thanks a lot for your attention and see you in the next lesson.