Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the advantage of using interfaces [duplicate]

Tags:

Let's say you have an interface

public interface Change {      void updateUser();     void deleteUser();     void helpUser();  } 

I've read that interfaces are Java's way to implement multiple inheritance. You implement an interface, then you have access to its methods. What I don't understand is, the methods don't have any body in the interface, so you need to give them a body in your class. So if you an interface is implemented by more than one class, you need to give the method a body in more than one class. Why is this better than just having individual methods in your classes, and not implementing an interface?

like image 765
Killian Avatar asked Jul 16 '13 20:07

Killian


People also ask

What are the advantages of using interfaces in C#?

One of the major advantages of Interface in C# is a better alternative to implement multiple inheritances. The interface enables the plug-and-play method. Complete Abstraction can be achieved by the implementation of Interface. Along with making our code easy to maintain, concept loose coupling can be achieved.

What happens when two interfaces have same name?

If a type implements two interfaces, and each interface define a method that has identical signature, then in effect there is only one method, and they are not distinguishable. If, say, the two methods have conflicting return types, then it will be a compilation error.


2 Answers

My professor in college once gave a great anecdote to describe polymorphism and encapsulation. It went like this.


Does anyone here know how a soda machine works? (Cue confused glances about why we'd even talk about this.) No? Let me tell you.

You drop in your change, and inside the machine is a little monkey who counts all your change to make sure you put in enough money. When you press the button for your soda, a little light comes on telling the monkey which button you pressed, and if you entered the right amount of change, he grabs your choice and throws it into the little hole for you to grab your soda.

This is the concept of encapsulation. We hide the implementation of the soda machine. Unless it's got one of those fancy, clear windows to let you see the inside, you honestly have no idea how it really works. All you know is that you put in some cash, you press a button, and if you put in enough, you get your drink.

To add to that, you know how to use a soda machine's interface, so therefore as long as the machine's interface follows the usual soda machine interface, you can use it. This is called the interface contract. The machine can be bringing the drinks from Antarctica on a conveyor belt for all you care, as long as you get your drink, it's cold, and you get change back.

Polymorphism is the idea that when you use the soda machine interface, it could be doing different things. This is why encapsulation and polymorphism are closely related. In polymorphism, all you know is that you're using a SodaMachine implementation, which can be changed, and as a result, different things can be done behind the scenes. This leads to the driving concept of polymorphism, which is the ability of one object, the SodaMachine, to actually act as both a MonkeySodaMachine and a ConveyorSodaMachine depending on the machine actually behind the interface.


Probably not word-for-word, but close enough. Essentially it boils down to two concepts: polymorphism and encapsulation. Let me know if you want clarification.

like image 157
Brian Avatar answered Oct 21 '22 08:10

Brian


Why is this better than just having individual methods in your classes, and not implementing an interface?

Because if a class C implements an interface I, you can use a C whenever an I is expected. If you do not implement the interface, you could not do this (even if you provided all of the appropriate methods as mandated by the interface):

interface I {     void foo(); }  class C1 implements I {     public void foo() {         System.out.println("C1");     } }  class C2 {  // C2 has a 'foo' method, but does not implement I     public void foo() {         System.out.println("C2");     } }  ...  class Test {     public static void main(String[] args) {         I eye1 = new C1();  // works         I eye2 = new C2();  // error!     } } 
like image 35
arshajii Avatar answered Oct 21 '22 08:10

arshajii