默认方法-Java 8 新特性
默认方法就是接口可以有实现方法,而且不需要实现类去实现其方法。
我们只需在方法名前面加个 default 关键字即可实现默认方法。
为什么要有这个特性?
当需要修改接口时候,需要修改全部实现该接口的类,Java 8 之前的集合框架没有 foreach 方法,通常能想到的解决办法是在JDK里给相关的接口添加新的方法及实现。然而,对于已经发布的版本,是没法在给接口添加新方法的同时不影响已有的实现。所以引进的默认方法。目的是为了解决接口的修改与现有的实现不兼容的问题。
语法
默认方法语法格式如下:
public interface Singer {
default void print(){
System.out.println("我是一名歌手");
}
}
多个默认方法
interface Singer {
default void print(){
System.out.println("我是一名歌手");
}
}
interface XiaLuo {
default void print(){
System.out.println("嗨害嗨,我是夏洛");
}
}
当一个类实现了多个接口,且这些接口有相同的默认方法时
第1种解决方案可以使用 super
来调用指定接口的默认方法
public class demo implements Singer,Xialuo{
@Override
public void print() {
Singer.super.print();
}
}
第2种解决方案是覆盖重写接口的默认方法:
public class ZJL implements Singer,Xialuo{
@Override
public void print() {
System.out.println("我是周杰伦,我感觉我一直活在夏洛的影子里");
}
}
静态方法
Java 8 的另一个特性是接口可以声明(并且可以提供实现)静态方法。
public interface Xialuo {
default void print(){
System.out.println("嗨害嗨,我是夏洛");
}
static void 经典语录(){
System.out.println("还看星星一颗两颗连成线,你以为你是贪吃蛇啊!!!?");
}
}
栗子
public class demo {
public static void main(String[] args) {
ZJL zjl=new ZJL();
zjl.print();
}
}
interface Singer {
default void print(){
System.out.println("我是一名歌手");
}
}
interface Xialuo {
default void print(){
System.out.println("嗨害嗨,我是夏洛");
}
static void 经典语录(){
System.out.println("还看星星一颗两颗连成线,你以为你是贪吃蛇啊!!!?");
}
}
class ZJL implements Singer,Xialuo{
@Override
public void print() {
Singer.super.print();
Xialuo.super.print();
Xialuo.经典语录();
System.out.println("我是周杰伦,我感觉我一直活在夏洛的影子里");
}
}
控制台输出: