Summary: in this tutorial, you will learn how to define an interface that extends one or more interfaces.
Like a class, an interface can extend another interface. A class can extend only one class, but an interface can extend multiple interfaces.
When you extend an interface, you’re creating a new interface that inherits all the members from the original interfaces. In addition, you can add new methods specific to the extended interface.
This is useful when want to introduce new behavior to classes that implement the extended interface.
If you modify the existing interface by adding new methods or changing the behavior of existing methods, it will break the existing classes that implement the interface.
Therefore, instead of changing the existing interface, you can extend it. This helps you maintain backward compatibility with the classes that already implement the original interface.
Extending an interface
To define an interface that extends another interface, you use the extends keyword:
interface NewInterface extends OriginalInterface {
//...
}
Code language: Java (java)
The following example shows how to define an interface that extends another interface.
First, define an interface Undoable
that includes one method undo()
:
interface Undoable {
void undo();
}
Code language: Java (java)
Second, define another interface Redoable
that extends the Undoable
interface:
interface Redoable extends Undoable {
void redo();
}
Code language: Java (java)
The Redoable
interface has two methods:
redo()
– This method is defined directly in theRedoable
interface.undo()
– This method is inherited from theUndoable
interface.
If you define a class that implements the Redoable
interface, you need to provide implementations for the two methods redo()
and undo()
.
Third, define a class TextEditor
that implements the Redoable
interface:
public class TextEditor implements Redoable {
@Override
public void redo() {
System.out.println("Redo");
}
@Override
public void undo() {
System.out.println("Undo");
}
}
Code language: Java (java)
Finally, create a new instance of the TextEditor
, assign it to a reference of the Redoable
interface, and call the undo()
and redo()
methods via the reference:
public class App {
public static void main(String[] args) {
Redoable r = new TextEditor();
r.undo();
r.redo();
}
}
Code language: Java (java)
Output:
Undo
Redo
Code language: Java (java)
Extending multiple interfaces
To extend multiple interfaces, you place a list of separated interfaces after the extends
keyword like this:
interface NewInteface extends Interface1, Interface2, Interface3{
// ...
}
Code language: Java (java)
When you define a class that implements the NewInteface
, you need to provide implementations of all the methods in the NewInteface
as well as the ones in the Interface1
, Interface2
, and Interface3
.
Let’s take a look at an example of extending multiple interfaces.
First, define three interfaces Shape
, Drawable
, and Resizable
:
interface Shape {
double area();
}
interface Drawable {
void draw();
}
interface Resizable {
void resize(double scale);
}
Code language: Java (java)
Second, define an interface Shape2D
that extends the three interfaces:
interface Shape2D extends Shape, Drawable, Resizable{
void rotate(double degrees);
}
Code language: Java (java)
In addition, the Shape2D
defines its own method called rotate()
.
Third, define a Rectangl
e class that implements the Shape2D
interface:
public class Rectangle implements Shape2D {
private double length;
private double width;
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
@Override
public double area() {
return this.length * this.width;
}
@Override
public void draw() {
System.out.println("Drawing the rectangle");
}
@Override
public void resize(double scale) {
System.out.println("Scaling the rectangle");
}
@Override
public void rotate(double degrees) {
System.out.println("Rotating the rectangle");
}
}
Code language: Java (java)
In this example, the Rectangle
class needs to implement all the methods of the Shape2D interfaces, including the ones that the Shape2D
inherited from other interfaces.
Summary
- Use
extends
keyword to define an interface that extends another interface. - An interface can extend more than one interface.
- Extending a new interface allows you to add new methods to the new interface and maintain backward compatibility to the existing classes that already implement the original interface.