在Java8之前,不允许多重继承,但是,在Java 8之后,Interfaces可以拥有默认方法(可以自己实现方法),就像抽象类一样。本文主要介绍实现多个接口时,接口方法同名问题。

1、示例接口

public interface Foo {
    default void doThat() {
        // ...
    }
}
public interface Bar {    
    default void doThat() {
        // ...
    }       
}

下面将不能编译

public class FooBar implements Foo, Bar{
}

2、重写方法消除歧义

1)调用Bar的doThat方法

public class FooBar implements Foo, Bar{    
    @Override
    public void doThat() {
        Bar.super.doThat();
    }    
}

2)调用Foo的doThat方法

public class FooBar implements Foo, Bar {
    @Override
    public void doThat() {
        Foo.super.doThat();
    }
}

3)完全重写的doThat方法

public class FooBar implements Foo, Bar {
    @Override
    public void doThat() {
        // ... 
    }
}

推荐文档