Java 接口是否可以继承多个接口?
我们都知道,Java类是单继承,那接口可以多继承吗?
答案是:Java 接口是可以继承多个接口的
Java不允许类多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A如何决定该继承那一个呢?
但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,所以接口可以继承多个接口。
注意:
1)一个类如果实现了一个接口,则要实现该接口的所有方法,包括该接口继承的接口的所有方法。
2)方法的名字、返回类型、参数必须与接口中完全一致。如果方法的返回类型不是void,则方法体必须至少有一条return语句。
3)因为接口的方法默认是public类型的,所以在实现的时候一定要用public来修饰(否则默认为protected类型,缩小了方法的使用范围)。
我们写个代码来验证下:
public interface Human {
public void say();
public void run();
}
public interface Man {
public void say();
public void jump();
}
public interface Student extends Human,Man{
}
Human类和Man类都拥有say() 方法,也有各自的方法。Student多继承了Human,Man,我们编写一个Student的实现类
public class StudentImpl implements Student{
@Override
public void say() {
System.out.println("StudentImpl say...");
}
@Override
public void jump() {
}
@Override
public void run() {
}
}
测试方法
public class TestDemo{
public static void main(String[] args) {
Student student = new StudentImpl();
student.say();
}
}
输出
StudentImpl say...
我们可以看到,程序正常输出了,并不会因为多继承接口里有同一个方法而冲突。
在这个类中,只有一个say方法实现了,同时也没有为有多个say要实现而冲突。同时,如果删除了接口Man中的say方法,也只有一个say方法得到了实现并且没有为多个say要实现而出现什么冲突。
所以,我们可以得到一个结论,当编译器在实现接口的时候会依然检查接口Student、Human和Man中的方法声明,如果后两者有与前者相冲突的方法声明,编译器将只要求类实现前者的声明,而后两者中相同的方法声明将自动被忽略。而当只有后两者中有相同的方法声明时,编译器将实现其中的一个即可。就好像是编译器中有一个专门存储方法声明的Set一样,在有继承关系的接口中,只保存一次相同的方法声明。