Java8 的 default 和static 的一些笔记

1. default和static关键字

    a.   default 用在接口中, 为该接口的实现类的方法.  --> 不能通过接口直接调用.  
           static 也是用在接口中, 同Class中的static方法一样, 是类级别的方法, 而不是对象的方法.  --> 可以通过接口直接调用. 
    b. 一个接口可以有多个default方法, 也可以有多个static方法.

2. default 在使用中的注意事项

如下面的例子, 
有两个接口, InterA和InterB, 都有一个方法, 为defaultFunction(), 
ClassA仅仅为InterA的实现类. 那么没有报错. 当调用ClassA的defaultFunction()时, 会自动调取InterA的方法.
但是ClassAB同时为InterA和InterB的实现类. 当调用ClassAB的defaultFunction()时, 不知道该调取哪个接口的了, 所以, ClassAB需要自己重写这个方法. 

3. Static则和default不同, 

打印结果

4. 源码

public class DefaultDemoApp {
    public static void main(String[] args) {
        new ClassA().defaultFunction();
        new ClassAB().defaultFunction();
    }
}

interface InterA {
    default void defaultFunction() {
        System.out.println("This is A defaultFunction");
    }

    static void staticFunction() {
        System.out.println("This is A status function");
    }
}

interface InterB {
    default void defaultFunction() {
        System.out.println("This is B defaultFunction");
    }

    static void staticFunction() {
        System.out.println("This is B status function");
    }
}

class ClassA implements InterA {

}

class ClassAB implements InterA, InterB {
    @Override
    public void defaultFunction() {
        InterB.staticFunction();
    }
}

猜你喜欢

转载自blog.csdn.net/sanpic/article/details/81563576