Java基础之接口定义加强及Lambda表达式4月打卡day07

举报
java厂长 发表于 2022/04/07 15:58:20 2022/04/07
【摘要】 6、接口定义加强造成此种尴尬的局面的核心问题在于,接口只是一个方法的声明,而没有具体方法的实现,所以随着时间的推移,如果出现以上的问题,该接口将无法继续使用。从JDK1.8为了解决这个问题,专门提供两种专门的接口。可以使用default来定义普通方法,需要通过对象调用。可以使用static来定义静态方法,通过接口名就能使用。定义普通方法package com.annotation;inte...

Java基础之接口定义加强及Lambda表达式4月打卡day07

关于作者

  • 作者介绍

🍓 博客主页:作者主页

🍓 简介:JAVA领域优质创作者🥇、一名在校大三学生🎓、在校期间参加各种省赛、国赛,斩获一系列荣誉🏆。

🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨‍💻。

6、接口定义加强

造成此种尴尬的局面的核心问题在于,接口只是一个方法的声明,而没有具体方法的实现,所以随着时间的推移,如果出现以上的问题,该接口将无法继续使用。从JDK1.8为了解决这个问题,专门提供两种专门的接口。

  1. 可以使用default来定义普通方法,需要通过对象调用。
  2. 可以使用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));
	}
}

后语

厂长写博客目的初衷很简单,希望大家在学习的过程中少走弯路,多学一些东西,对自己有帮助的留下你的赞赞👍或者关注➕都是对我最大的支持,你的关注和点赞给厂长每天更文的动力。

对文章其中一部分不理解,都可以评论区回复我,我们来一起讨论,共同学习,一起进步!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。