前言
- Jdk1.8之前的接口中只聲明方法,方法具體實現應在子類中進行。
- Jdk1.8打破了這樣的用法:接口中可以實現具體的方法體,只需要加上關鍵字static或者default修飾即可。
-
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
-
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. 接口中的靜態方法通過接口名.方法名()的方式來