Can a normal Class implement multiple interfaces?

后端 未结 8 1065
春和景丽
春和景丽 2021-01-31 01:34

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

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

相关标签:
8条回答
  • 2021-01-31 02:18

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

    0 讨论(0)
  • 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.

    0 讨论(0)
  • 2021-01-31 02:23

    It is true that a java class can implement multiple interfaces at the same time, but there is a catch here. If in a class, you are trying to implement two java interfaces, which contains methods with same signature but diffrent return type, in that case you will get compilation error.

    interface One
    {
        int m1();
    }
    interface Two
    {
        float m1();
    }
    public class MyClass implements One, Two{
        int m1() {}
        float m1() {}
        public static void main(String... args) {
    
        }
    }
    

    output :

    prog.java:14: error: method m1() is already defined in class MyClass
        public float m1() {}
                     ^
    prog.java:11: error: MyClass is not abstract and does not override abstract method m1() in Two
    public class MyClass implements One, Two{
           ^
    prog.java:13: error: m1() in MyClass cannot implement m1() in Two
        public int m1() {}
                   ^
      return type int is not compatible with float
    3 errors
    
    0 讨论(0)
  • 2021-01-31 02:28

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

    this is the way to implement multiple inheritence in java

    0 讨论(0)
  • 2021-01-31 02:29

    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:

    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");
        }
    }
    
    0 讨论(0)
  • 2021-01-31 02:34

    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 {...}
    
    0 讨论(0)
提交回复
热议问题