jdk8前后的接口比较

在jdk8之前的interface之中可以定义变量和方法,变量必须用public、static、final进行修饰。而方法必须为public、abstract的,而且这些修饰符都是默认的。
抽象方法必须由实现类来进行实现。
jdk8前

  • 接口定义方法:public、抽象方法、需要子类来实现
  • 接口定义变量:public、static、final

在jdk8开始,支持使用 staticdefault 来对方法进行修饰。可以拥有方法体,不需要子类重写,子类会自动基础接口中默认的方法体。

代码演示

创建UserDao接口

  1. package cn.unuuc.java;
  2. public interface UserDao {
  3. void insert();
  4. default void delete(){
  5. System.out.println("delete.......");
  6. }
  7. static void getUser(){
  8. System.out.println("getUser.......");
  9. }
  10. }

创建UserDaoImpl类并实现UserDao接口

  1. package cn.unuuc.java;
  2. public class UserDaoImpl implements UserDao{
  3. @Override
  4. public void insert() {
  5. System.out.println("UserDaoImpl insert.......");
  6. }
  7. }

测试

  1. @Test
  2. public void test01(){
  3. UserDaoImpl userDaoImpl = new UserDaoImpl();
  4. // 调用重写的方法
  5. userDaoImpl.insert();
  6. // 调用接口中默认的方法
  7. userDaoImpl.delete();
  8. // 调用接口中静态方法
  9. UserDao.getUser();
  10. }

image.png

  • 调用接口中静态方法,还是一样需要使用 接口名.方法名 进行调用