「编程」你真的完全弄懂了函数式编程么?


「编程」你真的完全弄懂了函数式编程么?
文章图片
【「编程」你真的完全弄懂了函数式编程么?】
「编程」你真的完全弄懂了函数式编程么?
文章图片
「编程」你真的完全弄懂了函数式编程么?
文章图片
「编程」你真的完全弄懂了函数式编程么?
文章图片
「编程」你真的完全弄懂了函数式编程么?
文章图片
今天是刘小爱自学Java的第47天 。
感谢你的观看 , 谢谢你 。
话不多说 , 开始今天的学习:
开始接触一个新的概念了 , 叫方法引用 。

这个概念和函数式编程是息息相关的 , 所以在学它之前要先回顾下这个函数式编程 。
以前总觉得自己对函数式编程的掌握还算是很不错时 , 事实却给我打了个大大的耳光 。
自己对于一些概念的理解并不是算准确 。

  • 一是回顾下知识点
  • 二也是补充了一下自己对函数式编程的理解 。
学习真的是一件需要不断地优化的事情 , 不然特容易鼠目寸光 。
一、函数式接口一开始我以为我完全了解了函数式接口 , 现在才发现我想的太简单了:
①注释@FunctionalInterface
这是一个注释 , 用来表明该接口为函数式接口 。
如果它不是函数式接口 , 编译会报错;
该注释也可以不写 , 写这个注释只不过更方便程序员判断接口是否为函数式接口 。
②抽象方法
接口中的抽象方法 , 修饰符abstract是可以省略的 。
所以函数式接口是:只有一个抽象方法的接口?
若是在以前 , 我会觉得这句话是对的 , 但是现在发现这句话不准确 。 看下面代码:
①equals抽象方法

现在该接口里有几个抽象方法?
有两个抽象方法:live方法和equals方法(其中abstract关键字都可以省略)
那为何不报错?如果equals方法像②中这样写又会报错 。
这是为什么?
因为Object中也有equals方法 , 所以不需要重写该接口中的equals方法 。
如何理解这句话?
Objcet类是顶层父类 , 也就是说所有类在没有父类的时候都默认继承自Objcet 。
Example实现了LiveRoom接口也是默认继承Objcet的 , 只不过一般省略不写 。
根据就近原则 , Example类中的equals方法是Objcet类中的 , 就算它要重写equals方法重写的也是Objcet中的方法 , 和接口没有关系 。
一个类继承自父类并且实现了接口 , 当父类和父接口有一模一样的方法时 , 该类重写的是父类中的方法 。 也就是亲爹要比干爹更加地重要…
那么问题来了?既然这样那接口中写一个equals接口有什么用呢?岂不是多此一举 。
其实也不一定 , 在多态中这样做有用:
①在多态中的应用

Objcet是顶层父类 , 也就是说任何类都具有Objcet中的方法 , 但是接口中是没有这些方法的 。
现在一个接口如果要调用其实现类继承自Objcet的方法 , 该怎么办?