Prerequisites: Java Basics Part 2
Let's learn about the concept of Java Interfaces with the help of a few examples in this lesson.
We'll cover the following...
Java Interface
An interface is a fully abstract class that includes a group of methods without a body.
In Java, an interface defines a set of specifications that other classes must implement. For example:
interface Language {
public void getName();
}
Here, we used the interface keyword to create an interface named Language. The Language interface defines the specification getName().
Now, every class that uses this interface should implement the getName() specification.
// create an interfaceinterface Language {void getName(String name);}// class implements interfaceclass ProgrammingLanguage implements Language {// implementation of abstract methodpublic void getName(String name) {System.out.println("Programming Language: " + name);}}class Main {public static void main(String[] args) {ProgrammingLanguage language = new ProgrammingLanguage();language.getName("Java");}}
In the above example, we created an interface named Language. The interface includes an abstract method called getName().
Here, the ProgrammingLanguage class implements the interface and provides the implementation for the method.
It is not compulsory to use the abstract keyword while declaring abstract methods inside an interface, because interfaces only include abstract methods, not regular methods.
Note: All the methods inside an interface are implicitly
publicand all fields are implicitlypublic static final: For example,
interface Language {
// by default public static final
String type = "programming language";
// by default public
void getName();
}
Implementing an Interface
Like abstract classes, we cannot create objects of an interface. However, we can implement an interface.
We use the implements keyword to implement an interface. For example:
// create an interfaceinterface Polygon {void getArea(int length, int breadth);}// implement the Polygon interfaceclass Rectangle implements Polygon {// implementation of abstract methodpublic void getArea(int length, int breadth) {System.out.println("The area of the rectangle is " + (length * breadth));}}class Main {public static void main(String[] args) {// create an objectRectangle r1 = new Rectangle();r1.getArea(5, 6);}}
In the above example, we created an interface named Polygon. The interface contains an abstract method getArea().
Here, the Rectangle class implements Polygon and provides the implementation of the getArea() method.
A class can implement multiple interfaces. For example:
interface A {
// members of A
}
interface B {
// members of B
}
class C implements A, B {
// abstract members of A
// abstract members of B
}
Extending an Interface
Like classes, interfaces can extend other interfaces. The extends keyword is used to extend interfaces. For example:
interface Line {
// members of Line interface
}
// extending interface
interface Polygon extends Line {
// members of Polygon interface
// members of Line interface
}
In the above example, the Polygon interface extends the Line interface. Now, if any class implements Polygon, it should provide implementations for all the abstract methods of both Line and Polygon.
An interface can extend multiple interfaces. For example:
interface A {
...
}
interface B {
...
}
interface C extends A, B {
...
}
Practical example of an interface
Let’s see a more practical example of Java Interface.
// To use the sqrt functionimport java.lang.Math;interface Polygon {void getArea();// calculate the perimeter of a Polygondefault void getPerimeter(int... sides) {int perimeter = 0;for (int side: sides) {perimeter += side;}System.out.println("Perimeter: " + perimeter);}}class Triangle implements Polygon {private int a, b, c;private double s, area;// initializing sides of a triangleTriangle(int a, int b, int c) {this.a = a;this.b = b;this.c = c;s = 0;}// calculate the area of a trianglepublic void getArea() {s = (double) (a + b + c)/2;area = Math.sqrt(s*(s-a)*(s-b)*(s-c));System.out.println("Area: " + area);}}class Main {public static void main(String[] args) {Triangle t1 = new Triangle(2, 3, 4);// calls the method of the Triangle classt1.getArea();// calls the method of Polygont1.getPerimeter(2, 3, 4);}}
In the above program, we created an interface named Polygon. It includes a default method getPerimeter() and an abstract method getArea().
We are able to calculate the perimeter of all polygons in the same manner by implementing the body of getPerimeter() in Polygon.
Now, all polygons that implement Polygoncan use getPerimeter() to calculate perimeter.
However, the rule for calculating the area is different for different polygons. Thus, getArea() is included without implementation.
Any class that implements Polygon must provide an implementation of getArea().
Check your knowledge!
Which of the following is true about methods in an interface in Java?
An interface can contain only abstract methods.
We can define a method in an interface.
The private and protected access modifiers can also be used to declare methods in an interface.
None