前言

  • Jdk1.8之前的接口中只声明方法,方法具体实现应在子类中进行。
  • Jdk1.8打破了这样的用法:接口中可以实现具体的方法体,只需要加上关键字static或者default修饰即可。
  1. default关键字

    public interface UserService {//自定义方法void getUsername();//默认方法default void defaultUsername(){System.out.println("UserService>>>>>>>defaultUsername");}//默认方法,子类重写default void overrideDefaultUsername(){System.out.println("UserService>>>>>>>overrideDefaultUsername");}}
    public class UserServiceImpl implements UserService {@Overridepublic void getUsername() {System.out.println("UserServiceImpl>>>>>>>>>getUsername");}@Overridepublic void overrideDefaultUsername() {System.out.println("UserServiceImpl>>>>>>>>>overrideDefaultUsername");}}
    public class Test {public static void main(String[] args) {UserService userService = new UserServiceImpl();userService.getUsername();userService.defaultUsername();userService.overrideDefaultUsername();}}
    "结果打印数据:"
    UserServiceImpl>>>>>>>>>getUsername
    UserService>>>>>>>defaultUsername
    UserServiceImpl>>>>>>>>>overrideDefaultUsername
  2. static关键字

    public interface UserService {void getUsername();default void defaultUsername(){System.out.println("UserService>>>>>>>defaultUsername");
    }default void overrideDefaultUsername(){System.out.println("UserService>>>>>>>overrideDefaultUsername");
    }static void staticUsername(){System.out.println("UserService>>>>>>>staticUsername");
    }}
    public class UserServiceImpl implements UserService {@Overridepublic void getUsername() {System.out.println("UserServiceImpl>>>>>>>>>getUsername");}@Overridepublic void overrideDefaultUsername() {System.out.println("UserServiceImpl>>>>>>>>>overrideDefaultUsername");}}
    在子类中发现不能重写被static关键字修饰的方法。
    public class Test {public static void main(String[] args) {UserService userService = new UserServiceImpl();userService.getUsername();userService.defaultUsername();userService.overrideDefaultUsername();UserService.staticUsername();}}
    "结果打印数据"
    UserServiceImpl>>>>>>>>>getUsername
    UserService>>>>>>>defaultUsername
    UserServiceImpl>>>>>>>>>overrideDefaultUsername
    UserService>>>>>>>staticUsername

总结
  default:
      1. detault关键字修饰的方法称为默认方法
      2. 子类可以选择性的是否重写该方法
      3. 接口中的default方法通过实例对象来调用
  static:
      1. static关键字修饰的方法称为静态方法
      2. 子类不能重写该方法
      3. 接口中的静态方法通过接口名.方法名()的方式来