1、概念:
接口的新特性用于解决接口功能扩展带来的问题。
2、解决:
接口中可以存在默认方法以及静态方法。
3、默认方法
(1)概念:使用default修饰方法
(2)语法
访问修饰符 default 返回值类型 方法名(参数列表){
方法体
}
(3)代码示例
interface Inter {
public default void method() {
System.out.println("Inter default method()...");
}
}
interface Inter2 {
public default void method() {
System.out.println("Inter2 default method()%%%");
}
}
class Fu{
public void method(){
System.out.println("Fu method()^^^");
}
}
class Impl extends Fu implements Inter,Inter2 {
}
public class Demo1_default {
public static void main(String[] args) {
Inter inter = new Impl();
inter.method();
//结论1:使用default方法扩展接口功能,其实现类无需重写方法,从而大大提高维护效率。
//结论2:实现类实现两个接口中相同方法名的default方法时,实现类必须重写该方法。
//结论3:实现类实现两个接口中相同方法名的default方法时,调用某个接口default方法,可以通过接口名.super.default方法()调用。
//结论4:实现类继承父类实现接口,父类的方法名与接口default的方法名相同,则子类优先重写/调用父类方法。
//结论5:在jdk8之后接口与抽象类十分相似,界线模糊,由于接口可以多实现,抽象类只能单继承,接口可以替代抽象类来使用。
}
}
4、静态方法
(1)语法
访问修饰符 static 返回值类型 方法名(参数列表){
方法体
}
(2)代码示例
interface Inter3 {
public static void method() {
System.out.println("Inter3 static mehtod()");
}
}
class Impl2 implements Inter3 {
//@Override
/*public static void method(){
System.out.println("Impl2 method()%%%");
}*/
}
public class Demo2_static {
public static void main(String[] args) {
Inter3.method();
//结论1:jdk1.8新增特性中接口可以有静态方法,该方法必须有方法体。
//结论2:该接口实现类无法重写该方法。
//结论3:使用接口中静态方法,可以通过接口名.方法名()使用用
}
}