前言

  • 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. 接口中的靜態方法通過接口名.方法名()的方式來