Interface in Java defines a IS-A
relationship between classes and a mechanism to achieve abstraction
. An Interface only consist of method definition and not the method body.
Benefits of Using Abstraction
- Provides a contract for a Class that implements the interface. That is to provide a common behaviour for multiple classes that implements the interface.
- The Class that implements Interface should implement all the methods defined in the Interface.
- It can be used to achieve loose coupling
- It can be used to support multiple inheritance in Java.
Interface Example
public interface IBankInterface { void openAccount(); void showBalance(); void withdrawAmount(); void depositAmount(); void changePhoneNumber(); void closeAccount(); }
The above code shows an Interface definition for a BankAccount which defines the general method of operations of a Bank Account. This Interface can be implemented by different Types of Bank Account (Savings, Current, Checking) and this will make sure that all the type of Bank Account Must implement the defined methods in the Interface.
Class Implementing Interface.
public class SavingsAccount implements IBankInterface { @Override public void openAccount() { System.out.println("Account is Opened"); } @Override public void showBalance() { System.out.println("Showing Current Balance"); } @Override public void withdrawAmount(double amount) { System.out.println("Withdrawing Amount " + amount); } @Override public void depositAmount(double amount) { System.out.println("Depositing Amount " + amount); } @Override public void changePhoneNumber(String phoneNumber) { System.out.println("Phone Number Changed to " + phoneNumber); } @Override public void closeAccount() { System.out.println("Account Closed"); } }
Consider the example of the Class SavingsAccount
that implements the Interface IBankInterface
has to implement all the methods defined by the Interface.
Let’s Consider a Main Class from where we will try to Run this code.
public class Main { public static void main(String args[]) { IBankInterface account = new SavingsAccount(); account.openAccount(); account.depositAmount(500); account.withdrawAmount(200); account.changePhoneNumber("232-232-2323"); account.closeAccount(); } }
This code will produce the following output.
Depositing Amount 500.0
Withdrawing Amount 200.0
Phone Number Changed to 232-232-2323
Account Closed
If you look into the code we have Initialised the Class SavingsAccount and saved its Object in type IBankInterface
and thus later we can replace this with any other type of Account CurrentAccount or CheckingAccount and it will work perfectly fine. Thus while passing Argument its always better to consider passing Interface to a Method definition and then we can use any Class implementation to pass into the method.