JDK1.8之接口定义增强

9003228-eae2e320b1a42a10.png
image.png

1.问题引出

众所周知,接口由全局变量和抽象方法组成,如果现在有个接口,有2W个子类,如果有一天发现,这个接口中方法不足,要增加一个方法,而针对于所有不同的子类,这个方法的功能实现是完全一样的。

最初的设想:在每一个子类上都覆写这个新的方法,那么就要覆写两万个子类,时间复杂度O(n),为了解决这个问题,JDK1.8以后允许在接口里面定义普通方法,但是如果要定义普通方法,就要明确的使用default来进行定义。
package TestDemo;

interface IMessage{
    public void print();
    default void fun(){//在接口里面定义了一个普通的方法
        System.out.println("JDK1.8new character");
    }
}
class MessageImpl implements IMessage{
    @Override
    public void print() {
        System.out.println("Hello World!");
    }

}
public class TestDemo {
    public static void main(String[] args) {
        IMessage msg=new MessageImpl();
        msg.fun();//调用了接口中default关键字定义的fun方法
    }
}

结果:


9003228-899cb99179344949.png
image.png
除了使用default定义方法之外,还可以使用static定义方法,一旦使用了static关键字定义,就说明此方法只可以使用类名称调用
package TestDemo;

interface IMessage{
    public void print();
    default void fun(){//在接口里面定义了一个普通的方法
        System.out.println("JDK1.8new character");
    }
    static void get(){
        System.out.println("static method in interface");
    }
}
class MessageImpl implements IMessage{
    @Override
    public void print() {
        System.out.println("Hello World!");
    }

}
public class TestDemo {
    public static void main(String[] args) {
        IMessage msg=new MessageImpl();
        msg.fun();
        IMessage.get();
    }
}
9003228-8e6288878c9002e8.png
image.png

总结:(接口增强少用)

1.接口里面使用default或static定义方法的意义是避免子类重复实现同样的代码
2.接口的使用还应该以抽象方法为主

猜你喜欢

转载自blog.csdn.net/weixin_33738578/article/details/87523540