• Java
    • JAXB Tutorial
      • What is JAXB
      • JAXB Marshalling Example
      • JAXB UnMarshalling Example
  • Spring Tutorial
    • Spring Core Tutorial
    • Spring MVC Tutorial
      • Quick Start
        • Flow Diagram
        • Hello World Example
        • Form Handling Example
      • Handler Mapping
        • BeanNameUrlHandlerMapping
        • ControllerClassNameHandlerMapping
        • SimpleUrlHandlerMapping
      • Validation & Exception Handling
        • Validation+Annotations
        • Validation+ResourceBundle
        • @ExceptionHandler
        • @ControllerAdvice
        • Custom Exception Handling
      • Form Tag Library
        • Textbox Example
        • TextArea Example
        • Password Example
        • Dropdown Box Example
        • Checkboxes Example
        • Radiobuttons Example
        • HiddenValue Example
      • Misc
        • Change Config file name
    • Spring Boot Tutorial
  • Hibernate Tutorial
  • REST Tutorial
    • JAX-RS REST @PathParam Example
    • JAX-RS REST @QueryParam Example
    • JAX-RS REST @DefaultValue Example
    • JAX-RS REST @Context Example
    • JAX-RS REST @MatrixParam Example
    • JAX-RS REST @FormParam Example
    • JAX-RS REST @Produces Example
    • JAX-RS REST @Consumes Example
    • JAX-RS REST @Produces both XML and JSON Example
    • JAX-RS REST @Consumes both XML and JSON Example
  • Miscellaneous
    • JSON Parser
      • Read a JSON file
      • Write JSON object to File
      • Read / Write JSON using GSON
      • Java Object to JSON using JAXB
    • CSV Parser
      • Read / Write CSV file
      • Read/Parse/Write CSV File – OpenCSV
      • Export data into a CSV File
      • CsvToBean and BeanToCsv – OpenCSV

JavaInterviewPoint

Java Development Tutorials

Multiple Inheritance in Java 8 through Interface

October 3, 2016 by javainterviewpoint Leave a Comment

Multiple Inheritance in Java is nothing but one class extending more than one class. Previous versions of Java(until JDk 7) doesn’t support Multiple Inheritance because it causes a famous problem called “Diamond Problem“ and hence indirectly Multiple Inheritance in Java is achieved using Interfaces. After the introduction of Default Methods in Java 8, even the interfaces can also have the method bodies. In this tutorial let’s see how the Diamond Problem is prevented in Java 8.

What is Diamond Problem in Java ?

Let’s first see What is Diamond Problem in Java and Why Java doesn’t support Multiple Inheritance

Multple Inheritance Diamond Problem

Multiple Inheritance in Java Example

class A
{
    public void disp()
    {
        System.out.println("A disp() method called");
    }
}
class B extends A
{
    @Override
    public void disp()
    {
        System.out.println("B disp() method called");
    }
}
class C extends A
{
    @Override
    public void disp()
    {
        System.out.println("C disp() method called");
    }
}
public class D extends B,C //Not Supported by Java
{
   public static void main(String args[])
   {
       D d = new D();
       d.disp(); // Ambiguity which disp() to call
   }
}
  • Class B and Class C inherits Class A and the disp() method of Class A is overridden by both B and C
  • Class D inherits both Class B and C (Not Supported by Java), If suppose we need to call the disp() method through the instance of Class D, then the Java compiler will not know which method to call whether disp() method of Class B or Class C. It results in ambiguity
  • In order to overcome the above issue, Multiple Inheritance is achieved through Interface. As in Java we can implement more than one java interface.

Multiple Inheritance in Java 8

In Java 8 Interface can also have method definition using Default Methods, then obviously it should also result in ambiguity isn’t it ? Yes, but Java 8 can handle this type of compatible issues. Lets look into the below example.

package com.javainterviewpoint;

interface Car
{
    public default void drive()
    {
        System.out.println("Car is driving");
    }
}
interface Jeep
{
    public default void drive()
    {
        System.out.println("Jeep is driving");
    }
}
public class Vehicle implements Car,Jeep
{

    public static void main(String args[])
    {
        Vehicle v = new Vehicle();
        v.drive();
                
    }
}

when we try to execute above class, we will be getting the “Unresolved compilation problem”

Multiple Inheritance in Java 8

Explicit Overriding :

In Java 8 you cannot implement multiple interfaces having same signature, without explicitly overriding the methods in the child class.

interface Car
{
    public default void drive()
    {
        System.out.println("Car is driving");
    }
}
interface Jeep
{
    public default void drive()
    {
        System.out.println("Jeep is driving");
    }
}
public class Vehicle implements Car,Jeep
{
    @Override
    public void drive()
    {
        System.out.println("Vehicle is driving");
    }
    public static void main(String args[])
    {
        Vehicle v = new Vehicle();
        v.drive();
    }
}

Output :
Vehicle is driving

Using Super Keyword: 

It is also possible to call the Parent interface method explicitly from the Child class. Lets take the above scenario if we want to call the Car interface drive() method, we can do that with the help of Super Keyword.

interface Car
{
    public default void drive()
    {
        System.out.println("Car is driving");
    }
}
interface Jeep
{
    public default void drive()
    {
        System.out.println("Jeep is driving");
    }
}
public class Vehicle implements Car,Jeep
{
    @Override
    public void drive()
    {
        Car.super.drive();
    }
    public static void main(String args[])
    {
        Vehicle v = new Vehicle();
        v.drive();
    }
}

Output :
Car is driving

Other interesting articles which you may like …

  • Java StringTokenizer Example
  • How to Reverse String in Java using String Tokenizer
  • What is the use of a Private Constructors in Java
  • Fibonacci Series Java Example
  • For Loop in Java with Example
  • For-each loop or Enhanced For loop in Java
  • Use of Class.forName in java
  • why we Use Class.forName in SQL JDBC
  • Can we Overload static methods in Java
  • Can we Override static methods in Java
  • Java Constructor Chaining with example
  • Java – Constructor in an Interface?
  • Inheritance in Java with Example Programs
  • Types of Inheritance in Java
  • Single Inheritance in Java with Example
  • Multiple Inheritance in Java Example
  • Multilevel Inheritance in Java with Example
  • Hierarchical Inheritance in Java with Example
  • Hybrid Inheritance in Java with Example

Filed Under: Core Java, Java Tagged With: Default Methods, Multiple Inheritance, Multiple Inheritance in Java

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Java Basics

  • JVM Architecture
  • Object in Java
  • Class in Java
  • How to Set Classpath for Java in Windows
  • Components of JDK
  • Decompiling a class file
  • Use of Class.forName in java
  • Use Class.forName in SQL JDBC

Oops Concepts

  • Inheritance in Java
  • Types of Inheritance in Java
  • Single Inheritance in Java
  • Multiple Inheritance in Java
  • Multilevel Inheritance in Java
  • Hierarchical Inheritance in Java
  • Hybrid Inheritance in Java
  • Polymorphism in Java – Method Overloading and Overriding
  • Types of Polymorphism in java
  • Method Overriding in Java
  • Can we Overload static methods in Java
  • Can we Override static methods in Java
  • Java Constructor Overloading
  • Java Method Overloading Example
  • Encapsulation in Java with Example
  • Constructor in Java
  • Constructor in an Interface?
  • Parameterized Constructor in Java
  • Constructor Chaining with example
  • What is the use of a Private Constructors in Java
  • Interface in Java
  • What is Marker Interface
  • Abstract Class in Java

Java Keywords

  • Java this keyword
  • Java super keyword
  • Final Keyword in Java
  • static Keyword in Java
  • Static Import
  • Transient Keyword

Miscellaneous

  • newInstance() method
  • How does Hashmap works internally in Java
  • Java Ternary operator
  • How System.out.println() really work?
  • Autoboxing and Unboxing Examples
  • Serialization and Deserialization in Java with Example
  • Generate SerialVersionUID in Java
  • How to make a class Immutable in Java
  • Differences betwen HashMap and Hashtable
  • Difference between Enumeration and Iterator ?
  • Difference between fail-fast and fail-safe Iterator
  • Difference Between Interface and Abstract Class in Java
  • Difference between equals() and ==
  • Sort Objects in a ArrayList using Java Comparable Interface
  • Sort Objects in a ArrayList using Java Comparator

Follow

  • Coding Utils

Useful Links

  • Spring 4.1.x Documentation
  • Spring 3.2.x Documentation
  • Spring 2.5.x Documentation
  • Java 6 API
  • Java 7 API
  • Java 8 API
  • Java EE 5 Tutorial
  • Java EE 6 Tutorial
  • Java EE 7 Tutorial
  • Maven Repository
  • Hibernate ORM

About JavaInterviewPoint

javainterviewpoint.com is a tech blog dedicated to all Java/J2EE developers and Web Developers. We publish useful tutorials on Java, J2EE and all latest frameworks.

All examples and tutorials posted here are very well tested in our development environment.

Connect with us on Facebook | Privacy Policy | Sitemap

Copyright ©2023 · Java Interview Point - All Rights Are Reserved ·