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.