Can a normal Class implement multiple interfaces?

221,630

Solution 1

A Java class can only extend one parent class. Multiple inheritance (extends) is not allowed. Interfaces are not classes, however, and a class can implement more than one interface.

The parent interfaces are declared in a comma-separated list, after the implements keyword.

In conclusion, yes, it is possible to do:

public class A implements C,D {...}

Solution 2

public class A implements C,D {...} valid

this is the way to implement multiple inheritence in java

Solution 3

In a word - yes. Actually, many classes in the JDK implement multiple interfaces. E.g., ArrayList implements List, RandomAccess, Cloneable, and Serializable.

Solution 4

Yes, a class can implement multiple interfaces. Each interface provides contract for some sort of behavior. I am attaching a detailed class diagram and shell interfaces and classes.

Ceremonial example:

enter image description here

public interface Mammal {
    void move();
    boolean possessIntelligence();
}
public interface Animal extends Mammal {
    void liveInJungle();
}

public interface Human extends Mammal, TwoLeggedMammal, Omnivore, Hunter {
    void liveInCivilization();
}
public interface Carnivore {
    void eatMeat();
}
public interface Herbivore {
    void eatPlant();
}
public interface Omnivore extends Carnivore, Herbivore {
    void eatBothMeatAndPlant();
}
public interface FourLeggedMammal {
    void moveWithFourLegs();
}
public interface TwoLeggedMammal {
    void moveWithTwoLegs();
}
public interface Hunter {
    void huntForFood();
}
public class Kangaroo implements Animal, Herbivore, TwoLeggedMammal {
    @Override
    public void liveInJungle() {
        System.out.println("I live in Outback country");
    }

    @Override
    public void move() {
        moveWithTwoLegs();
    }

    @Override
    public void moveWithTwoLegs() {
        System.out.println("I like to jump");
    }

    @Override
    public void eat() {
        eatPlant();
    }

    @Override
    public void eatPlant() {
        System.out.println("I like this grass");
    }

    @Override
    public boolean possessIntelligence() {
        return false;
    }
}

public class Lion implements Animal, FourLeggedMammal, Hunter, Carnivore {
    @Override
    public void liveInJungle() {
        System.out.println("I am king of the jungle!");

    }

    @Override
    public void move() {
        moveWithFourLegs();
    }

    @Override
    public void moveWithFourLegs() {
        System.out.println("I like to run sometimes.");
    }

    @Override
    public void eat() {
        eatMeat();
    }

    @Override
    public void eatMeat() {
        System.out.println("I like deer meat");
    }

    @Override
    public boolean possessIntelligence() {
        return false;
    }

    @Override
    public void huntForFood() {
        System.out.println("My females hunt often");
    }
}
public class Teacher implements Human {
    @Override
    public void liveInCivilization() {
        System.out.println("I live in an apartment");
    }

    @Override
    public void moveWithTwoLegs() {
        System.out.println("I wear shoes and walk with two legs one in front of the other");
    }

    @Override
    public void move() {
        moveWithTwoLegs();
    }

    @Override
    public boolean possessIntelligence() {
        return true;
    }

    @Override
    public void huntForFood() {
        System.out.println("My ancestors used to but now I mostly rely on cattle");
    }

    @Override
    public void eat() {
        eatBothMeatAndPlant();
    }

    @Override
    public void eatBothMeatAndPlant() {
        eatPlant();
        eatMeat();
    }

    @Override
    public void eatMeat() {
        System.out.println("I like this bacon");
    }

    @Override
    public void eatPlant() {
        System.out.println("I like this broccoli");
    }
}

Solution 5

Of course... Almost all classes implements several interfaces. On any page of java documentation on Oracle you have a subsection named "All implemented interfaces".

Here an example of the Date class.

Share:
221,630
Joshua
Author by

Joshua

Updated on July 05, 2022

Comments

  • Joshua
    Joshua almost 2 years

    I know that multiple inheritances between Interfaces is possible, e.g.:

    public interface C extends A,B {...} //Where A, B and C are Interfaces
    

    But is it possible to have a regular Class inherit from multiple Interfaces like this:

    public class A implements C,D {...} //Where A is a Class and C and D are interfaces
    
  • Rami Alloush
    Rami Alloush over 5 years
    Thanks for the answer, I'm wondering how to use the "this" to refer to a certain interface in this case.
  • meriam
    meriam about 5 years
    Actually, an interface can extend any number of interfaces: docs.oracle.com/javase/tutorial/java/IandI/interfaceDef.html
  • Daniel
    Daniel over 3 years
    But why is it "ok" to do so. As i understand multiple inheritance is not allowed in java because both parent classes might have a method with the same signature. So while two different interfaces might have a method with same signature - why is it allowed to implemnt more than 1 interface?
  • Dave Lugg
    Dave Lugg over 2 years
    @Daniel Because if you have two concrete implementations of the same method, there is no good way to determine which one to use. In the case of implementing interfaces, there's no concrete implementation in either of them, so there is no confusion. Your implementing class's method is the one being used.