lambda表达式Stream流学习十三—Java8中对接口的改动,接口中的默认方法与静态方法
一,接口中的默认方法
public interface MyFun {
//默认方法
default String getName(){
return "哈哈哈";
}
}
public class Myclass implements MyFun{
public String getName(){//和接口的默认方法一致, 此处运用了接口默认方法的 "类优先" 原则
return "嘿嘿嘿";
}
}
public class test {
public static void main(String[] args) {
Myclass my = new Myclass();
System.out.println(my.getName());//调用的是父类实现的getName()
/*
类优先原则 : 若一个接口中定义了一个默认方法, 而另外一个父类又定义了一个同名的方法时, 选择父类的方法.如果一个父类提供了具体的实现,那么接口中具有相同名称和参数的默认方法会被忽略.
*/
}
}
二,接口中的静态方法
public interface MyFun {
static void show(){
System.out.println("接口中的静态方法");
}
}
public class test {
public static void main(String[] args) {
Myclass my = new Myclass();
MyFun.show();//接口中的静态方法
}
}
三,接口冲突
接口冲突:如果一个父接口提供一个默认方法,而另一个接口也提供了一个具有相同名称和参数列表的方法(无论改方法是否为默认方法),则必须覆盖该方法来解决冲突。
//定义一个接口
public interface MyFun {
default String getName(){//默认方法
return "哈哈哈";
}
}
//定义另一个接口, 默认方法相同
public interface MyFun2 {
default String getName(){//默认方法
return "哈哈哈";
}
}
//定义一个类同时实现这两个接口,此时就会导致 "接口冲突"
public class MyClass2 implements MyFun, MyFun2{
/*
MyFun与MyFun2都有getName方法,同时实现这两个接口时就会导致接口冲突,此时需要重写该方法去覆盖接口中的方法
报错信息 : com.java8.day13.MyClass2 inherits unrelated defaults for getName() from types com.java8.day13.MyFun and com.java8.day13.MyFun2
接口冲突 : 如果一个父接口提供一个默认方法,而另一个接口也提供了一个具有相同名称和参数列表的方法(无论改方法是否为默认方法),则必须覆盖该方法来解决冲突.
*/
@Override
public String getName() {
return "";
}
}