Implementing two interfaces with two default methods of the same signature in Java 8

前端 未结 6 562
悲哀的现实
悲哀的现实 2020-11-30 06:10

Suppose I have two interfaces:

public interface I1
{
    default String getGreeting() {
        return \"Good Morning!\";
    }
}

public interface I2
{
             


        
6条回答
  •  无人及你
    2020-11-30 07:06

    This is a compile-time error. You cannot have two implementation from two interfaces.

    However, it is correct, if you implement the getGreeting method in C1:

    public class C1 implements I1, I2 // this will compile, bacause we have overridden getGreeting()
    {
        public static void main(String[] args)
        {
            System.out.println(new C1().getGreeting());
        }
    
        @Override public String getGreeting()
        {
            return "Good Evening!";
        }
    }
    

    I just want to add that even if the method in I1 is abstract, and default in I2, you cannot implement both of them. So this is also a compile-time error:

    public interface I1
    {
        String getGreeting();
    }
    
    public interface I2
    {
        default String getGreeting() {
            return "Good afternoon!";
        }
    }
    
    public class C1 implements I1, I2 // won't compile
    {
        public static void main(String[] args)
        {
            System.out.println(new C1().getGreeting());
        }
    }
    

提交回复
热议问题