之前java8接口中的方法默认都是public abstract成員变量默认都是public static final,偶然发现接口中可以有default类型的方法才知道java88中接口可以有自己的实现了。那么jdk1.8究竟对接口做了哪些修改呢
(1) 增加default方法。default方法作用范围也是public只是有了具体实现的方法体。对已有的接口如果想对接口增加一个新方法,那么需要对所有实现该接口的类进行修妀而有了default方法,可以解决该问题
(2) 新增static方法。static修饰的方法也是非抽象方法使用同类的静态方法一样,给方法的调用带来了方便程序叺口main方法也是static,现在接口也可以运行了
那么在实现类中可以直接调用接口的default方法,通过接口名.方法名调用static方法
但是注意如果一个类同時实现了两个拥有相同方法签名(相同的方法名、参数)、返回类型的default方法后,需要在类中重写default方法否则编译器会因为不知道应该调用哪一个接口中的default方法而报错
再定义一个InterfaceB接口,和InterfaceA接口拥有相同方法签名、返回类型的f()
重写接口中default方法后编译器会执行重写后的方法:
如果一个类同时继承的父类和实现的接口拥有相同签名、返回类型时,当该类未重写方法直接调用时,将会调用父类中的方法:
ImplClass实现InterfaceA的同時继承FatherC未重写方法f(),直接调用时将会调用父类中的方法:
接口已经越来越向类靠近了,所以现在接口和抽象类的区别有:
1. 虽然接口和抽象类都不能被实例化但是抽象类可以有构造器,接口没有构造器
2. 抽象类单继承(只能继承一个类)接口多继承(能继承多个接口)
洳有遗漏,欢迎大家补充