这里我们先看一个案例
我们创建一个包
包下创建一个接口 testInterface
参考代码如下
public interface testInterface {
void show();
}
然后 我们创建一个类型 realizationMethod 来实现这个接口 并重写这个show方法
realizationMethod 参考代码如下
public class realizationMethod implements testInterface {
public void show(){
System.out.println("测试数据");
}
}
这是一个比较标准的 接口定义抽象方法 实现类 实现接口 重写实现类的方法
但这个 如果我们给接口加一个抽象方法
public interface testInterface {
void show();
void show2();
}
这样 我们 realizationMethod 类就开始报错了
因为 我们没有重写show2
但这样不方便啊 比如 我一个接口有很多方法 又有很多类要实现他 难道每一个都要重写这个接口的方法吗?
用以前的方法 我们可以再建一个接口subInterface
将 testInterface 接口的void show2();去掉 然后编写subInterface接口代码如下
public interface subInterface extends testInterface {
void show2();
}
我们创建了一个接口 来继承testInterface 他就有了 testInterface的方法
将show2写给子接口 这样 想重写show2 继承他的子接口就好了
但这样写 其实也很不理想 你就想 我们每次升级一下 自己的接口 都要又写一个子接口 到时 项目越写越多 其实是很不友好的
这里 我们可以写java8后推出的 默认方法
我们更改testInterface接口代码如下
public interface testInterface {
void show();
default void show2(){
}
}
这里 我们再看realizationMethod类
这里 他就不报错了 因为 show2现在是个默认方法 他是可以不被重写的 但他需要有方法体 当然 你可以在实现类中重写他的内容
这就是java8后的默认方法 他不是抽象方法 所以可以不重写 当然 也可以被重写
因为可以不重写 不会破坏原有的代码接口 所以更多适用于接口的更新