前言
- 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 { @Override public void getUsername() { System.out.println("UserServiceImpl>>>>>>>>>getUsername"); } @Override public 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 { @Override public void getUsername() { System.out.println("UserServiceImpl>>>>>>>>>getUsername"); } @Override public 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. 接口中的静态方法通过接口名.方法名()的方式来