「编程」你真的完全弄懂了函数式编程么?
文章图片
【「编程」你真的完全弄懂了函数式编程么?】
文章图片
文章图片
文章图片
文章图片
今天是刘小爱自学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的方法 , 该怎么办?
- 如果接口中没有equals方法 , ①中代码会报错 。
- 如果接口中有equals方法 , ①中代码能运行 。
- 韦世良Sir|它真的是个生命体吗?,卫星拍到地球正在自我清理
- 『土星』哈雷“地心说”是真的?地球是个多层嵌套的空心圆?看看这些证据
- 志霖美丽新娱乐啊|12配置完全曝光,高刷新率未能实现,台积电要忙起来了,iPhone
- 数码智玩|或许iphone12真的没有标配充电器,iphone发起USB电源适配器调查
- 【】从不落地的“无脚鸟”,连睡觉都在天上,它真的一辈子都在飞吗?
- UFO:1985年在新墨西哥,发现带有中国汉字的金属碎片,这是真的吗?
- 课工场郑州翔天信鸽|JavaScript最常用,java是主流,JetBrains公布编程语言排名
- ▲海底3700米下拍到的一张图,让人不禁疑惑:这真的还是地球吗?
- 『程序员』程序员多次劝说邻居,不要让孩子去学编程,结果蒙了
- 黑丝科技|我们该反思了,真的要抵制苹果吗?看看iPhone手机背后的那句话