欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > 【Java进阶学习 第五篇】JDK8、9中的接口新特性

【Java进阶学习 第五篇】JDK8、9中的接口新特性

2025/2/25 2:47:35 来源:https://blog.csdn.net/weixin_45927386/article/details/145788989  浏览:    关键词:【Java进阶学习 第五篇】JDK8、9中的接口新特性

接口新特性

可以提升代码的复用性,减少冗余

JDK8中接口的新特性主要可以允许调用默认方法和静态方法JDK9中接口的新特性为可以运行调用私有方法供本类方法使用

JDK8新特性

接口中可以定义有方法体的方法(默认或静态)

允许调用默认方法

作用是解决接口升级的问题

允许在接口中定义非抽象方法,但是需要使用关键字default修饰

public class JDK8 {public static void main(String[] args) {InterNet1 interNet1 = new InterNet1();InterNet2 interNet2 = new InterNet2();interNet1.method();interNet2.method();}
}
interface Inter{void show();void print();//升级接口public default void method(){System.out.println("Inter method...");}
}
class InterNet1 implements Inter{@Overridepublic void show() {System.out.println("show111...");}@Overridepublic void print() {System.out.println("print111...");}
}
class InterNet2 implements Inter{@Overridepublic void show() {System.out.println("show222...");}@Overridepublic void print() {System.out.println("print222");}
}

 比如这个代码是V2.0版本,使用JDK8的新特性就可以添加默认方法让子类调用,从而不需要修改实现类就可以升级接口。


实现类也可以重写接口的默认方法

package com.itheima.JdkNew;public class JDK8 {public static void main(String[] args) {InterNet1 interNet1 = new InterNet1();InterNet2 interNet2 = new InterNet2();interNet1.method();interNet2.method();}
}
interface Inter{void show();void print();//升级接口public default void method(){System.out.println("Inter method...");}
}
class InterNet1 implements Inter{@Overridepublic void method() {System.out.println("111 method...");//Inter.super.method();}@Overridepublic void show() {}@Overridepublic void print() {}
}
class InterNet2 implements Inter{@Overridepublic void show() {}@Overridepublic void print() {}
}

打印为:

111 method...
Inter method... 可以看见第一个实现类已经可以对接口中的默认方法进行重写


其中需要去掉default关键字,且如果要调用接口中的代码,需要用接口名.super

如果实现了多个接口,多个接口中存在相同的默认方法,实现类必须重写默认方法

public class JDK8 {public static void main(String[] args) {InterNet1 interNet1 = new InterNet1();interNet1.method();}
}
interface Inter{void show();void print();//升级接口public default void method(){System.out.println("Inter method...");}
}
interface A{public default void method(){System.out.println("A method...");}
}
class InterNet1 implements Inter,A{@Overridepublic void method() {Inter.super.method();A.super.method();}@Overridepublic void show() {}@Overridepublic void print() {}
}

打印为:

Inter method...
A method... 可以看见在多实现接口的情况下,我们必须在子类重写同名的默认方法,且调用父类时,需要在super前声明接口。


允许调用静态方法

public class JDK8 {public static void main(String[] args) {A.function();}
}interface A{default void method(){System.out.println("A method...");}static void function(){System.out.println("A function...");}
}

public可以省略,static不能省略,只能通过类名调用 


JDK9新特性

接口中可以定义私有方法

如果接口当中许多方法都需要同样的实现逻辑,可以编写私有方法方便操作

public class JDK8 {public static void main(String[] args) {InterNet2 obj = new InterNet2();obj.method();obj.function();}
}interface A{default void method(){System.out.println("A method...");printLove();
//        System.out.println("love");}default void function(){System.out.println("A function...");printLove();
//        System.out.println("love");}private void printLove(){System.out.println("love");}
}

 如果接口的方法中有JDK8新特性提出的静态方法,那么我们可以在私有方法的基础上加上static修饰,这样既可以让默认方法使用,也可以让静态方法调用

public class JDK8 {public static void main(String[] args) {InterNet2 obj = new InterNet2();obj.method();A.function();}
}interface A{default void method(){System.out.println("A method...");printLove();
//        System.out.println("love");}static void function(){System.out.println("A function...");printLove();
//        System.out.println("love");}private static void printLove(){System.out.println("love");}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词