×

How to achieve Multiple Inheritance in Java

Multiple Inheritance is the type of inheritance where one class inherits the properties of more than one super class. For example, class Child inherits (extends) the classes Father and Mother. If there are methods with the same name and parameters in both the super classes and the sub class in Java.

And we call the method, the compiler is unable to determine which class method to invoke. Thus, Java does not support Multiple Inheritance.

How to achieve Multiple Inheritance in Java?

Multiple Inheritance Example

Let’s consider this example to understand why Java do not support multiple inheritance.

//super class 1
class Father{
void quality(){
System.out.println("Discipline");
}
}


//super class 2
class Mother{
void quality(){
System.out.println("Kindness");
}
}


//subclass gives error as it inherits from multiple classes
class Child extends Father, Mother{
public static void main(String[] args) {
Child ch = new Child();
ch.quality();
}
}

Output:

How to achieve Multiple Inheritance in Java?

The above code results in compilation error as we call method quality() from the Child class’s object, causing ambiguity.

Java does not allow multiple inheritance to avoid the ambiguity caused by it.

Two main reasons Java do not have multiple inheritance:

Diamond problem:

Consider the following problem, which depicts the multiple inheritance.

  • Here, we have class GrandFather having method quality().
  • Then the classes Father and Mother derive the method from GrandFather, and both of them override the method quality().
  • Now the class Child derives from Father class and Mother class with multiple inheritance. If it calls the method quality(), compiler will be unable to determine which method to call (overridden method of Father class OR overridden method of Mother class). This is called the Diamond problem.
How to achieve Multiple Inheritance in Java?

Simplicity:

Multiple Inheritance is not allowed in Java using classes, i.e., a class can only extend only one class. To handle the complexity occurring due to multiple inheritance is complex. Various operations like casting, constructor chaining, etc., are hindered due to it. So to avoid such problems, Java does not have multiple inheritance.

Although Java doesn’t support multiple inheritance, there is a way to resolve the ambiguity caused by the above examples.

Interface in Java

Multiple Inheritance in Java can be achieved by using the interfaces. The interface can be called a blueprint of a class. It contains static constants and abstract methods. By default, the interface variables are static and final, and the methods are abstract.

Java 8 has introduced default and static methods in the interface.

And Java 9 has introduced private methods in an interface.

Declaration of interface

The interface can be declared using the keyword interface. Abstraction is achieved in interfaces as all the methods are abstract, and all the variables are static and final by default.

Note: If a class implements an interface, it must implement all the methods of that interface.

Syntax:

interface interface_name {
//declaring constant variables
//declaring methods 
}

Example:

//defining the interface
interface InterfaceTest{
void display();
}


//defining the class and implementing the interface
class Class1 implements InterfaceTest {
public void display(){
System.out.println("Displaying the data");
}


//main method
public static void main(String[] args) {
Class1 obj = new Class1();
obj.display();
}
}

Output:

How to achieve Multiple Inheritance in Java?

Multiple Inheritance in Java

When a class implements multiple interfaces or an interface extends multiple interfaces, it is called as multiple inheritance.

How to achieve Multiple Inheritance in Java?

Example 1:

Let’s consider the basic example to use multiple inheritance in Java.

TestInterface.java

//interface 1
interface Display{


//declaring the method 
void display_method();
}


//interface 2
interface Show{


//declaring the method 
void show_method();
}


//defining the class which implements the interfaces
class TestInterface implements Display, Show {


//defining method of Interface 1
public void display_method(){
System.out.println("Interface name: Display");
}


//defining method of Interface 2
public void show_method(){
System.out.println("Interface name: Show");
}


//main method
public static void main(String[] args) {
TestInterface obj = new TestInterface();


//calling the methods
obj.display_method(); 
obj.show_method();
}




}

Output:

How to achieve Multiple Inheritance in Java?

Multiple Inheritance is not supported by classes (due to ambiguity) in Java; however, it is supported by interfaces. It is because the class which implements the interface provides implementation of methods.

Example 2:

Let’s consider the below example where we create two interfaces with the names of the same methods. The methods are declared in the interfaces and implemented in the class.

TestClass.java

//interface 1
interface Interface1{


//declaring the method 
void hello();
}


//interface 2
interface Interface2{


//declaring the method 
void hello();
}


//defining the class which implements the interfaces
class TestClass implements Interface1, Interface2 {


//defining hello() method 
public void hello(){
System.out.println("Interfaces do not cause ambiguity");
}


//main method
public static void main(String[] args) {
TestClass obj = new TestClass();


//invoking the method with class object
obj.hello(); 

}
}

Output:

How to achieve Multiple Inheritance in Java?

In the above example, Interface1 and Interface2 have the same methods hello(); however, its implementation is provided by class ClassTest, so there is no ambiguity.

Default methods:

In Java, a class can implement multiple interfaces. The interfaces provide default implementation of methods. Here, all the interfaces contain default methods with the same signature, so the class that is implementing the interface should explicitly mention which default method to call or simply override the default method.

Example 3:

Consider the below example to implement multiple inheritance using default methods.

TestDefaultMethod.java

//defining first interface
interface Interface1{


//defining default method
default void display(){
System.out.println("This is method of first interface");
}
}


//defining second interface
interface Interface2{


//defining default method
default void display(){
System.out.println("This is method of second interface");
}
}
 
//class that implements Interface1 and Interface2
public class TestDefaultMethod implements Interface1, Interface2{


//overriding default method display()
public void display(){
//using super keyword to invoke display() of Interface1
Interface1.super.display();


//using super keyword to invoke display() of Interface2
Interface2.super.display();
}


public static void main(String[] args) {
TestDefaultMethod dm = new TestDefaultMethod();
dm.display();
}
}

Output:

How to achieve Multiple Inheritance in Java?

In this way, we have learned how to achieve multiple inheritance in Java with the help of Interfaces.


Related Topics

Get year from date in Java

The getYear() method of the Java date class returns a number calculated by deducting 1900 from the year that contains or starts with the instant in time represented by this...

4 minutes read.

Deque in Java

Deque in java collections with Example Deque is short for “double-ended queue.” It is a linear collection that extends the Queue interface and supports insertion and deletion of the element at both the...

3 minutes read.

Math fma () method in java

In java, the Math module constitutes of fma () Method in it. This method can be accessed in two ways which can be differentiated by the parameters which are given...

4 minutes read.

Set Matrix Zeros in Java

In coding round interviews, it is frequently asked as the most significant challenge. an m*n matrix is provided. Set the entire column and row of the matrix to 0 if any...

6 minutes read.

Java Tokens

Classes and methods are included in the Java program. The procedures also provide the expressions and statements required to finish a specific operation. Tokens make up the sentences and expressions...

4 minutes read.

Thread States in Java

An Item's Life Cycle (Thread States) A thread can be in any of the states mentioned above at any given time in Java. They are as follows: New Active I'm blocked or waiting Temporary...

3 minutes read.

Get yesterdays date by no of days in Java

In this tutorial, we are going to learn how to get yesterday’s date by the no of days in Java. Using the Calendar class, one can get the current date....

1 minute read.

Java Finally Keyword

The final block in Java is used to run essential code, such as connection closure, among other things. Whether an exception is resolved or not, the Java finally block has...

3 minutes read.

Nonagonal number in Java

Figureate numbers with the form n(7n-5)/2 are known as nonagonal numbers. 7n+3 will be a triangular number if n is a nonagonal number. The nonagon is included in the idea...

4 minutes read.

Difference between throw and throws in java

This article shows you the core difference between “throw” and “throws”keywords in Java programming language.The throw keyword tells Java you want another part of the code to deal withthe exception,...

2 minutes read.

Java Math multiplyFull() Method

The multiplyFull() method of Math class returns the exact product of the arguments. Syntax: public static long multiplyFull (int x, int y) Parameters: The parameters ‘x’ and ‘y’ represent the first value and second...

1 minute read.

Java Extends keyword

Extends Extends is a keyword which is completely depended on the concept of the inheritance of the java programming language.To understand about of the keyword, we need to learn the concept...

3 minutes read.

Heap Sort in Java

Heap Sort in JavaHeap sort in Java uses the data structure binary heap, min-heap, or max heap to do the sorting of elements. Since min-heap always gives the minimum element first,...

8 minutes read.

How to Round Double Float up to Two Decimal Places in Java

It indicates 15 digits just after the decimal place in Java whenever a double data type is used in front of a variable. For example, when representing rupees and other...

4 minutes read.

Stable Marriage Problem in Java

Given N men and N women, the Stable Marriage Problem asks you to match up the men and women in such a way that there are never any two people...

6 minutes read.

Java 13 New Features

The Java SE Platform's JDK 13 version is an open-source reference implementation defined by the Java Community's JSR 388 Process. The necessary modifications made in Java 13 are listed below....

6 minutes read.

Series Program in Java

Series Program in Java The series program in Java is written to print the mathematical series such as the Fibonacci series, Pell series, etc. A few of the renowned series are...

12 minutes read.

How to sort a String in Java

Sorting is the process of putting the elements in a certain order, either ascending or descending. Mostly the alphabetical order or natural order is used for a string. In other...

5 minutes read.

Java Array Generic

Creating Generic Array in Java A collection of comparable sorts of data is kept in an array. In Java, making a generic array is challenging. The type information of an array's...

4 minutes read.

Hidden classes in Java

There specifically are some APIs available in the market that generally is harmful to be used in our programs specifically literally, and until JDK 15, there, for all intents and...

4 minutes read.