接口使用的注意事项及其重要特点:
使用接口时,应注意:
- 接口时没有静态代码块或者构造方法的。
public interface MyInterface { static{ } public MyInterface(){ } } //此乃错误写法
- 一个类的直接父类是唯一的,但是一个类可以同时实现多个接口。
public class MyInterfaceImpl implements MyInterfaceA,MyInterfaceB{ //覆盖重写所有抽象方法 }
- 如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖一次即可。
- 如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。
- 如果实现类实现的多个接口中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。
接口A: public interface MyInterfaceA { public abstract void methodA(); public abstract void methodAbs(); public default void methodDefault(){ System.out.println("默认方法AAA"); } } 接口B: public interface MyInterfaceB { public abstract void methodB(); public abstract void methodAbs(); public default void methodDefault(){ System.out.println("默认方法AAA"); } } 实现类: //一个类可以同时实现多个接口 public class MyInterfaceImpl implements MyInterfaceA,MyInterfaceB{ @Override public void methodA() { System.out.println("覆盖重写了A方法"); } @Override public void methodB() { System.out.println("覆盖重写了B方法"); } @Override//接口抽象方法重名问题 public void methodAbs() { System.out.println("覆盖重写了AB接口都有的抽象方法"); } @Override//接口默认方法重名问题 public void methodDefault() { System.out.println("对多个接口当中冲突的默认方法进行了覆盖重写"); } }
- 如果一个类直接父类中的方法,和接口当中的默认方法产生了冲突,优先用父类当中的方法。
父类: public class Demo { public static void main(String[] args) { Zi zi = new Zi(); zi.method(); } } 接口: public interface MyInterface { public default void method(){ System.out.println("接口的默认方法"); } } 子类: public class Zi extends Fu implements MyInterface{ } 主函数调用: public interface MyInterface { public default void method(){ System.out.println("接口的默认方法"); } }
输出结果:
父类方法
接口之间的多继承
- 类与类之间是单继承的,直接父类只有一个。
- 类与接口之间是多实现的,一个类可以实现多个接口。
- 接口与接口之间是多继承的。
注意事项:
- 多个父接口当中的抽象方法如果重复,没关系。
- 多个父类接口当中的默认方法如果重复,那么子接口必须对默认方法进行覆盖重写,【而且带着default关键字】。
接口A:
public interface MyInterfaceA {
public abstract void methodA();
public abstract void methodCommon();
public default void methodDefault(){
System.out.println("AAA");
}
}
接口B:
public interface MyInterfaceB {
public abstract void methodB();
public abstract void methodCommon();
public default void methodDefault(){
System.out.println("BBB");
}
}
子接口:(继承了接口A、B)
/*
这个子接口当中有5个方法:
1.methodA来源于接口A
2.methodB来源于接口B
3.methodCommon同时来源于接口A和B
4.method来源于自己
5.默认方法methodDefault产生冲突,子方法必须进行默认方法覆盖重写
*/
public interface MyInterface extends MyInterfaceA,MyInterfaceB{
public abstract void method();
public abstract void methodCommon();
@Override
default void methodDefault() {
}
}