前言
- 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. 接口中的静态方法通过接口名.方法名()的方式来