Java基础之接口定义加强及Lambda表达式4月打卡day07
Java基础之接口定义加强及Lambda表达式4月打卡day07
关于作者
- 作者介绍
🍓 博客主页:作者主页
🍓 简介:JAVA领域优质创作者🥇、一名在校大三学生🎓、在校期间参加各种省赛、国赛,斩获一系列荣誉🏆。
🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨💻。
6、接口定义加强
造成此种尴尬的局面的核心问题在于,接口只是一个方法的声明,而没有具体方法的实现,所以随着时间的推移,如果出现以上的问题,该接口将无法继续使用。从JDK1.8为了解决这个问题,专门提供两种专门的接口。
- 可以使用default来定义普通方法,需要通过对象调用。
- 可以使用static来定义静态方法,通过接口名就能使用。
定义普通方法
package com.annotation;
interface IMess{
public default void fun(){//追加普通方法,又方法体了
System.out.println("hello,world!");
}
public void print();
}
class MessImpl implements IMess{
@Override
public void print() {
// TODO Auto-generated method stub
System.out.println("www.baidu.com");
}
}
public class Demo3 {
public static void main(String[] args) {
MessImpl msg = new MessImpl();
msg.print();
msg.fun();
}
}
定义static方法
package com.annotation;
interface IMess{
public default void fun(){//追加普通方法,又方法体了
System.out.println("hello,world!");
}
public static IMess getInstance(){//定义静态方法
return new MessImpl();
}
public void print();
}
class MessImpl implements IMess{
@Override
public void print() {
// TODO Auto-generated method stub
System.out.println("www.baidu.com");
}
}
public class Demo3 {
public static void main(String[] args) {
// MessImpl msg = new MessImpl();
IMess msg = IMess.getInstance();
msg.print();
msg.fun();
}
}
整体来说,接口更像抽象类,但是比抽象类强大在于,接口的子类依然可以实现多继承的关系,而抽象类继续保持单继承。
7、Lambda表达式
最具有代表性的就是haskell.函数式编程和面向对象编程为两大开发阵营
传统的面向对象开发
package com.annotation;
interface IMess{
public void print();
}
public class Demo3 {
public static void main(String[] args) {
IMess msg = new IMess(){
public void print(){
System.out.println("Hello,world!");
};
};
msg.print();
}
}
使用匿名内部类来实现接口最大好处就是节约了一个文件,最大的缺点就是看的眼花缭乱,对于此操作有了更简化的体现。如果采用函数式编程模型。
函数式编程模型
package com.annotation;
interface IMess{
public void print();
}
public class Demo3 {
public static void main(String[] args) {
IMess msg = ()->System.out.println("Hello,world!");
msg.print();
}
}
如果想要使用函数式编程前提,接口只能写一个方法,如果编写两个方法,则会出现语法错误。可以在接口的开头加上@FunctionalInterface声明这是一个函数接口。
实际上对于以上的语法形式:
- (参数 )->单行语句;
这个时候方法本身只包含一行语句,那么直接编写语句即可,如果要是有多行语句,则就需要我们使用"{}"
package com.annotation;
@FunctionalInterface
interface IMess{
public void print();
}
public class Demo3 {
public static void main(String[] args) {
IMess msg = ()->{
System.out.println("Hello,world!");
System.out.println("Hello,world!");
System.out.println("Hello,world!");
};
msg.print();
}
}
如果现在你的表达式里面的内容只是一行进行数据的返回,那么直接使用语句即可,不用写return。
package com.annotation;
interface IMath{
public int add(int x, int y);
}
public class Demo4 {
public static void main(String[] args) {
IMath msg = (p1, p2)-> p1 + p2;
System.out.println(msg.add(10, 20));
}
}
后语
厂长写博客目的初衷很简单,希望大家在学习的过程中少走弯路,多学一些东西,对自己有帮助的留下你的赞赞👍或者关注➕都是对我最大的支持,你的关注和点赞给厂长每天更文的动力。
对文章其中一部分不理解,都可以评论区回复我,我们来一起讨论,共同学习,一起进步!
- 点赞
- 收藏
- 关注作者
评论(0)