面向对象-接口

1. 接口的概念

  1. 接口就是规范\规则,我们可以使用接口来定义一些规则(比如要求某个方法的方法名必须叫什么,方法的参数列表必须是什么,方法的返回值类型必须是什么)

2. 接口的格式

2.1 定义接口

  1. 使用interface来定义接口
  1. public interface 接口名{
  2. //定义抽象方法
  3. void method();
  4. }

2.2 实现接口

  1. 在要实现接口的类名后面加上implements 接口名。如果要实现多个接口,多个接口名用逗号分开。我们在理解的时候可以把接口理解成是一个特殊的父类。
  1. public class 类名 implements 接口名{}

3. 接口中的成员

3.1 常用成员

  1. jdk7版本中接口中只能有常量和抽象方法。
  2. 我们接口中定义不了成员变量。因为定义的成员变量默认都会修饰为:public static final
  3. 我们在接口中定义的方法默认修饰符为public abstract

例子

  1. public interface InterfaceA {
  2. //常量
  3. int NUM =10;//等价于public static final int NUM =10;
  4. //抽象方法
  5. void method();//等价于 public abstract void method();
  6. }

3.2 新增成员

  1. 在新版本的jdk中接口中允许出现更多的成员。

3.2.1 默认方法

  1. jdk8中允许我们在接口中定义默认方法。默认方法允许有方法体。
  2. 默认方法可以选择不进行重写。

3.2.1.1 格式
  1. 使用defaut关键字进行修饰。
  1. public interface InterfaceA {
  2. //默认方法
  3. default void method(){
  4. }
  5. }

3.2.1.2 注意事项
  1. 如果两个接口中有相同的默认方法。一个类同时实现了这两个接口,必须要重写该方法。

3.2.1.3 应用场景
  1. 如果在接口升级的时候某些方法并不想让所有的实现类进行重写,可以使用默认方法来定义。

3.2.2 静态方法

  1. jdk8中允许我们在接口中定义静态方法。静态方法允许有方法体。
  2. 静态方法不能被重写。

3.2.2.1 格式
  1. 使用static关键字进行修饰。
  1. public interface InterfaceA {
  2. //静态方法
  3. static void staticMethod(){
  4. }
  5. }
  6. public class Demo {
  7. public static void main(String[] args) {
  8. //使用接口名.方法名(参数) 来调用
  9. InterfaceA.staticMethod();
  10. }
  11. }

3.2.2.2 应用场景
  1. 如果在接口升级的时候需要给接口增加一些工具方法。不想让实现类去重写该方法,可以使用静态方法来定义。

3.2.3 私有方法

  1. jdk9中允许我们在接口中定义私有方法。私有方法允许有方法体。
  2. 私有方法不可以被重写。

3.2.3.1 格式
  1. 使用private进行修饰。
  1. public interface InterfaceA {
  2. private static void privateStaticMethod(){
  3. }
  4. private void privateMethod(){
  5. }
  6. }

3.2.3.2 应用场景
  1. 对默认方法或者是静态方法中重复的代码进行抽取,提高代码复用度。

4. 继承实现关系

  1. java中一个类可以实现多个接口

例如

  1. public class Person implements InterfaceA,InterfaceB{}
  1. java中接口和接口之间可以有继承关系。继承之后会把父接口的成员继承下来。
  1. public interface InterfaceC extends InterfaceA{
  2. // void method1();
  3. }

5. 抽象类和接口的使用区别

  1. 接口中的基本都是抽象的,而在抽象类中可以有一部分是非抽象方法。而非抽象类中是不可以有抽象方法的。
  2. 我们就发现接口是最抽象的,其次是抽象类,最后是非抽象类。<br /> 所以我们最顶层设计成接口,然后实现类设计成抽象类(实现部分抽象方法),抽象类的子类可以设计成非抽象类(对剩下的所有抽象方法进行实现)。