Jdk1.8新特性之default、static关键字

default

在写接口AsyncConfigurer的实现类时,IDE居然没有强制要求实现接口中的方法,感觉很是奇怪,因此查看其源码:

public interface AsyncConfigurer {

   @Nullable
   default Executor getAsyncExecutor() {
       return null;
   }

   @Nullable
   default AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
       return null;
   }
}

发现有一个default关键字,后来在网上查看资料才知晓这是jdk1.8的一个新特性:

1.可以有且必须有方法体
2.实现类可以不重写该方法,此时会调用接口方法
3.若实现类重写了该方法,此时调用实现类中的方法

创建一个Person接口

public interface Person {

    default void say() {
        System.out.println("I'm a person");
    }
}

Student实现Person接口

public class Student implements Person {

    public static void main(String[] args) {
        Student t = new Student();
        t.say();
    }
}

输出:

I'm a person

修改Student 实现类

public class Student implements Person {

    @Override
    public void say() {
        System.out.println("I'm a student");
    }
    
    public static void main(String[] args) {
        Student t = new Student();
        t.say();
    }
}

输出

I'm a student

static

在jdk1.7是不可能将接口中的方法修饰成static

public interface Person {

    static void say() {
        System.out.println("I'm a person");
    }
}

使用方式: ClassName.staticMethod

public class Student {
    
    public static void main(String[] args) {
        Person.say();
    }
}

·

你可能感兴趣的:(Jdk1.8新特性之default、static关键字)