Java|Java | 接口

接口的概念
接口,主要是用来描述类需要具有什么样的功能(方法),而不给出每个功能具体实现,把这些功能的实现交给实现该接口的类去实现,实现该接口的类必须实现该接口的所有方法(接口的静态方法跟默认方法除外)。
接口有以下几个特点:

  1. 接口中方法都默认且必须用 public 修饰的,因为是默认的所以可以省略不写。
  2. 接口中的域(属性)也是默认且必须用 public static final 修饰
  3. 接口跟抽象类一样不能实例化,可以声明变量
  4. 接口中不能有实例域也就是成员变量(ps:如果有违反了第二条, 接口不能被实例化有实例域也没啥意义)
  5. 实现接口时,必须将实现方法声明为 public
  6. 在 jdk 1.8 前接口不能有实现方法,之后就可以有了,可以用 staticdefault 声明实现方法。
  7. 可以用 instanceof 检查对象是属于某个一样的,去检查对象是否实现了某个接口。
【Java|Java | 接口】interface 声明一个接口:
package com.project; public interface Person { // 吃东西 void eat(); }

implements 实现一个接口
package com.project; public class Woman implements Person{@Override public void eat() { System.out.println("正在吃苹果"); }}

接口中的静态方法 接口中的静态方法必须写具体实现,且不被实现该接口的类继承,可以通过 接口名.方法名调用 类似于类的静态方法。
static 声明一个静态方法
package com.project; public interface Person { // 吃东西 public static void eat() { System.out.println("正在吃苹果"); } }

不需要也不能实现接口的静态方法
package com.project; public class Woman implements Person{public static void main(String[] args) { // 调用接口静态方法 Person.eat(); } }

接口中的默认方法 默认方法提供了接口方法的默认实现,如果实现接口的类没有重写默认方法,那么采用默认实现。
跟静态方法不同的是,实现类会继承接口的默认方法,可以选择实现或者不实现。
package com.project; public interface Person { // 吃东西 public default void eat() { System.out.println("人正在吃苹果"); } }

默认方法冲突
如果两个接口方法名相同,有类实现类这两个接口的话,实现类必须覆盖。
如果接口跟父类方法名冲突,父类优先,接口方法会被忽略。

    推荐阅读