使用接口的时候注意,需要注意:
1.接口是不存在静态代码块或者构造方法的。
知识点回忆:静态代码块的典型用途--用来一次性地对静态成员变量进行赋值。当第一次用到本类时,静态代码块执行唯一的一次,优于非静态代码块。
不能写构造方法,写了就能new了。
2.一个类的直接父类是唯一的,但是一个类可以同时实现多个接口。
格式:
public clas MyInterfaceImpl implements MyInterfaceA,MyInterfaceB{
// 覆盖重写所有抽象方法
}
public interface MyInterfaceA { public abstract void methodA(); }
public interface MyInterfaceB { public abstract void methodB(); }
public class Demo06Interface implements MyInterfaceA,MyInterfaceB{ @Override public void methodA() { System.out.println("覆盖重写了A抽象方法"); } @Override public void methodB() { System.out.println("覆盖重写了B抽象方法"); }}
3.如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可。
@Override public void method() { System.out.println("覆盖重写了A、B接口都有的抽象方法"); }
4.如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。
5.如果实现类所实现的多个接口当中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。
A、B
public default void methodDefault(){ }
实现类:
@Override public void methodDefault() { System.out.println("覆盖重写了A、B冲突的抽象方法"); }
6.一个类如果直接父类当中的方法,和接口当中的默认方法产生了冲突,优先用父类当中的方法。
public class Fu { public void method(){ System.out.println("父类的成员方法"); } }
public interface MyInterface { public default void method(){ System.out.println("接口的默认方法"); } }
public class Zi extends Fu implements MyInterface{ }
Zi zi = new Zi(); zi.method();
运行截图: