static方法
java8中为接口新增了一项功能:定义一个或者更多个静态方法。用法和普通的static方法一样。
代码示例
public interface InterfaceA {
/**
* 静态方法
*/
static void showStatic() {
System.out.println("InterfaceA++showStatic");
}
}
测试
public class Test {
public static void main(String[] args) {
InterfaceA.show();
}
}
结果
InterfaceA++showStatic
注意,实现接口的类或者子接口不会继承接口中的静态方法
default方法
在接口中,增加default方法, 是为了既有的成千上万的Java类库的类增加新的功能, 且不必对这些类重新进行设计。 比如, 只需在Collection接口中
增加default Stream stream(), 相应的Set和List接口以及它们的子类都包含此的方法, 不必为每个子类都重新copy这个方法。
代码示例
实现单一接口,仅实现接口
public interface InterfaceA {
/**
* 静态方法
*/
static void showStatic() {
System.out.println("InterfaceA++showStatic");
}
/**
* 默认方法
*/
default void showDefault() {
System.out.println("InterfaceA ++showDefault");
}
}
/**先只实现这个接口
*/
public class InterfaceAImpl implements InterfaceA{
}
测试
public class Test {
public static void main(String[] args) {
InterfaceA.showStatic();
new InterfaceAImpl().showDefault();
}
}
结果
InterfaceA++showStatic
InterfaceA ++showDefault
如果接口中的默认方法不能满足某个实现类需要,那么实现类可以覆盖默认方法。
实现单一接口,重写接口中的default方法
public class InterfaceAImpl implements InterfaceA{
/**
* 跟接口default方法一致,但不能再加default修饰符
*/
@Override
public void showDefault(){
System.out.println("InterfaceAImpl++ defaultShow");
}
}
测试
public class Test {
public static void main(String[] args) {
InterfaceA.showStatic();
new InterfaceAImpl().showDefault();
}
}
结果
InterfaceA++showStatic
InterfaceAImpl++ defaultShow
实现多个接口,且接口中拥有相同的default方法和static方法
新创建个接口InterfaceB
/**
*/
public interface InterfaceB {
/**
* 静态方法
*/
static void showStatic() {
System.out.println("InterfaceB++showStatic");
}
/**
* 默认方法
*/
default void showDefault() {
System.out.println("InterfaceB ++showDefault");
}
}
如果不加重写方法就会报错,因为实现类不知道你使用的是哪个接口中的默认方法:
public class InterfaceAImpl implements InterfaceA,InterfaceB{
}
修改实现类
public class InterfaceAImpl implements InterfaceA,InterfaceB{
@Override
public void showDefault() {
System.out.println("InterfaceAImpl ++ showDefault");
}
测试结果
InterfaceA++showStatic
InterfaceAImpl ++ showDefault
总结
需要注意一点就是如果实现多个接口时,每个接口都有相同的default方法需要重写该方法。
最新评论
徒弟可以A师傅,学生可以A老师,为什么外包不能A正式,我觉得很正常。异性相吸这是宇宙真理
PHP天下第一(狗头叼花)
第一个不需要关注公主号直接给激活码的帖子!
客户端超时断开后,服务端如果没有设置超时机制,那也会继续等待处理,万一这期间有消息到了,那不是就接受到消息处理了,但是也没有办法返回到客户端,导致消息丢失。
企业级GO项目开发实战 Kubernetes权威指南 第六版
https://pan.baidu.com/s/1q3bnTncIACKoTZFxvx7BQw?pwd=ii7n
RabbitMQ精讲,项目驱动落地,分布式事务拔高 有吗?
Spring Cloud Alibaba 微服务架构实战 https://pan.baidu.com/s/1jF5voFRoeF0lYAzAPBWSbw?pwd=chqk