Use Interface in Java
A class that contains only abstract methods and no concrete methods becomes an interface.
Interface concept – Advantage:
A programmer wrote java program to connect to a database to for retrieving data from it, something like this.
package com.sneppets.corejava; public class MyDB{ public void connect() { System.out.println("connecting to specific (Oracle) DB"); } public void disconnect() { System.out.println("Disconnected from specific (Oracle) DB"); } }
The above class has a limitation. It can connect only to oracle database. If the client uses any other database then this code will not work. So we need to design the code in such a way that the code can be used to connect to any database. How it is possible ? Interface helps to solve this problem. Let us see how to write an interface in the following section.
Declaring an Interface
An interface is the specification of method prototypes. All the methods of the interface are public and abstract . When you are creating an interface, you are defining a contract what a class can do without saying anything about how class will do it. An interface is a contract.
package com.sneppets.corejava; public interface MyInterface { //all the methods of an interface are public and abstract by default. public void connect(); public void disconnect(); }
Interface methods are public since they should be available to third party vendors or programmers to provide their implementation. They are abstract because their implementation is left for third party vendors or programmers.
Interface Implementation Classes
Now, let’s see how the clients (users) using different databases like MySQL and PostgreSQL will provide implementation classes to MyInterface interface. For example MySQL people may provide implementation like the following for connecting to MySQL database and disconnecting from the database
package com.sneppets.corejava; public class MySQLDB implements MyInterface{ @Override public void connect() { // code to connect to MySQL DB } @Override public void disconnect() { // code to disconnect from MySQL DB } }
Similarly, the PostgreSQL people may provide their implementation for connecting to PostgreSQL database and disconnecting from the database.
package com.sneppets.corejava; public class PostgreSQLDB implements MyInterface{ @Override public void connect() { // code to connect to PostgreSQL DB } @Override public void disconnect() { // code to disconnect from PostgreSQL DB } }
Note that implements keyword should be used with interface implementation classes
Why it is not possible to create object to an interface?
An interface contains only abstract methods which are all incomplete methods. So it is not possible to create object to an interface. But we can create separate classes where we can implement all the methods of interfaces. These classes are called implementation classes. And it is possible to create objects to the implementation classes.
Interface – Points to remember:
- An interface is a specification of method prototypes i.e., only method names are written without method bodies.
- An interface will have zero or more abstract methods. And all interface methods are implicitly public and abstract .
- All variables defined in an interface must be public , static and final i.e., interfaces can declare only constants, not instance variables.
- Interface methods must not be static .
- You cannot create an object to an interface, but you can create a reference of interface type.
- Since interface methods are abstract , they cannot be marked final .
- An interface can extend one or more interfaces.
- An interface cannot extend anything other than another interface.
- An interface cannot implement another interface or class.
- If any method is not implemented, then the implementation class should be declared as abstract .
- Methods in the interface cannot be declared as private , protected or static .
- When an interface is written, any third party vendor can provide implementation classes to it.
- Interface forces implementation classes to implement all of its methods compulsory.