Interface in Java
What is an Interface in Java:
- Interface keyword is used to design any user-defined or predefined interface.
- It is very similar to an abstract class. And both abstract classes and interfaces support the concept of abstraction.
- The interface in java supports 100% abstraction. It has only static constants and abstract methods. It cannot contain a concrete method.
- The Java compiler converts methods of interface as public and abstract, data members as public, static and final by default.
- Similar to abstract classes, interfaces also cannot be instantiated.
Reasons to use interface:
- It helps in achieving full abstraction.
- With the help of the interface, Java supports the functionality of multiple inheritances.
Difference between abstract class and interface:
Abstract class | Interface |
---|---|
Supports 0 to 100% abstraction. | Support 100% abstraction. |
Abstract class may contain any abstract or concrete method. | Interface only contains abstract methods. By default the method within interface is public and abstract. |
Abstract classes can have a body. | Interfaces cannot have a body. |
Any type of variable is allowed within abstract class. | The variable is public, static and final if it is declared inside an interface. |
User can design a constructor within abstract class. | Constructors are not allowed in interface. |
Abstract class doesn't support multiple inheritance. | Interface directly supports multiple inheritance. |
Multiple inheritance by Interface:
- A class cannot extend multiple classes in Java, but it can implement multiple interfaces easily.
public interface Showable { void show(); } public interface Printable { void print(); } public class TestShowPrint implements Printable, Showable { public void print() { System.out.println("Print method"); } public void show() { System.out.println("Show method"); } public static void main(String[] args) { TestShowPrint obj = new TestShowPrint(); obj.print(); obj.show(); } }
Output:
A class implements an interface but an interface extends another interface. However, an interface can also extend multiple interfaces.
public interface PrintClass { void print(); } public interface ShowClass { void show(); } public class DemoPrintShow implements PrintClass, ShowClass { public void print() { System.out.println("Print method"); } public void show() { System.out.println("Show method"); } public static void main(String[] args) { TestShowPrint obj = new TestShowPrint(); obj.print(); obj.show(); } }
Output:
Marker Interface:
- An interface that does not have any members is known as a marker or tag interface. In other words, it is an empty interface.
- For example,
import java.lang.Cloneable;
,import java.io.Serializable;
,import java.util.EventListener;
- They only provide some essential information to the JVM so that JVM may perform some useful operation.
public class StudentMarker implements Cloneable { int rollno; String name; public StudentMarker(int rollno, String name) { this.name = name; this.rollno = rollno; } public Object clone() throws CloneNotSupportedException{ return super.clone(); } public static void main(String[] args) throws CloneNotSupportedException { StudentMarker obj1 = new StudentMarker(103, "Satya"); System.out.println(obj1.rollno + " " + obj1.name); StudentMarker obj2 = (StudentMarker)obj1.clone(); System.out.println(obj2.rollno+" " + obj2.name); } }
Output:
The Nested Interface:
An interface can have another interface inside it. This is the concept of a nested interface.
public interface Message { void show(); interface ShowMessage { void msg(); } } public class NestedMessage implements Message.ShowMessage, Message { public void msg() { System.out.println("Nested interface msg method !"); } public void show() { System.out.println("Outer interface show method!"); } public static void main(String args[]){ Message.ShowMessage obj = new NestedMessage(); obj.msg(); Message obj2 = new NestedMessage(); obj2.show(); } }
Output: