接口学得我懵逼了,总结一下
趁着刚学完,做个笔记以后好回忆
接口定义
格式如下
1 2 3 4 5 6 7 8 9
| public interface myInterface{ public abstract void methodAbs1();
abstract void methodAbs2();
public void methodAbs3();
void methodAbs4(); }
|
接口的方法必须有 public abstract 两个关键词修饰
但这两个关键词可以省略
以上四个都是抽象方法
使用
1 2 3 4 5 6 7
| public class myInterfaceImpl implements myInterface{ @Override public void methodAbs1() { System.out.println("first method"); } ... }
|
接口不能直接使用,必须先实现类来实现该接口
接口必须覆盖重写(实现)接口中所有的抽象方法
如果实现类没覆盖重写所有的抽象方法,否则自己必须是抽象类
接口常量
就是接口里的“成员变量”,必须用 public static final 修饰
可以省略 public static final ,不写效果一样
格式
1 2 3
| public interface myInterface{ public static final NUM = 10; }
|
建议常量全部大写,用下划线分隔
接口静态方法
格式就是把abstract或者default换成static
1 2 3 4 5
| public interface myInterface{ public static void method(){ ... } }
|
和静态方法的用法一样直接接口名称调用
1 2 3 4 5
| public class test{ public static void main(String[] args){ myInterface.method(); } }
|
接口默认方法
用以解决接口升级的问题,接口定义了 default 修饰的方法后,使用接口的类可以直接使用,不需要覆盖重写,也可以覆盖重写
1 2 3 4 5
| public interface myInterface{ public default void method(){ ... } }
|
使用
1 2 3
| public class demo implements myInterface { ... }
|
1 2 3 4 5 6
| public class test { public static void main(String[] args){ demo one = new demo(); one.method(); } }
|
默认方法就是在定义接口的时候实现的方法,继承它的类可以选择覆盖重写,或者不管
这些类实现的对象可以使用这些默认方法
接口私有方法
当定义默认接口的时候,会出现重复的代码块,这时候就可以把这些代码块提取出来放在一个方法里面,需要用的时候直接调用就可以了
但这些方法只能允许本接口中这些默认方法使用,所有可以给这些方法修饰为私有(private)方法
格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public interface myInterface{ public default void methodA(){ ... play(); }
public default void methodB(){ ... play(); }
private void play(){ ... } }
|
play 方法只允许本接口中的方法使用,别的地方都不能使用
接口私有静态方法
接口中的静态方法也会有重复的代码块,这时候也可以把它提取出来放在一个方法里面,由于这些方法是静态的,所有这个代码块也要是静态的,又因为不想让这个代码块再别的地方用,再给它加个私有(private)的修饰
格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public interface myInterface{ public static void methodA(){ ... play(); }
public static void methodB(){ ... play(); }
private static void play(){ ... } }
|
使用
1 2 3 4 5 6 7 8
| public class test{ public static void main(String[] args){ myInterface.methodA(); myInterface.methodB();
} }
|
一个类只能有一个父类,但可以有多个接口
实例
1 2 3
| public class test implements myInterfaceA, myInterfaceB{ ... }
|
- 如果实现类有多个接口中,存在重复的抽象方法,那么只需要覆写一次就可以了
- 如果实现类没有覆盖重写所有接口的所有抽象方法,那么实现类必须是一个抽象类
- 如果多个接口中存在重复的默认方法,那么实现类必须覆盖重写默认方法
- 如果父类中的方法和接口中的默认方法产生冲突,优先用父类中的方法
懵逼中,总结了一下后,感觉好多了(´・_・`)