JDK 8 新特性 之 default关键字

时间:2022-07-22
本文章向大家介绍JDK 8 新特性 之 default关键字,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

前言

  • 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 {

    @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
 

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 {

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