函数式接口

1、为什么要面向接口编程,它有什么好处?

拓展性强,可以动态的更改实现类而不用改动代码。

2、jdk1.8前后的接口变化

jdk1.8以前的特性:
1、可以有属性,但属性为常量。
2、可以有方法,但方法必须是抽象方法或者静态方法。
可以写静态方法的原因是:接口也是类,具有类的属性和方法。
不可以写一般方法的原因是:接口不可以new,即没有对象,所以就没有对象所具有的一般方法。

jdk1.8以后的特性:
1、可以写默认方法,并且默认方法有方法体。子类可以继承,也可以重写。

3、函数式接口,Lambda表达式

在java中类是一等公民,传值可以以类的形式,对象的形式传,但没有办法传行为,想要传行为需要包装在类/对象中。
函数式编程里函数是一等公民

  1. 什么是函数式接口
    接口中有且只有一个抽象方法,可以有多个默认方法。
    像这样的接口可以隐式的转换为lambda表达式。
  2. Lambda表达式的演变?
    Lambda表达式看似是函数,实则是匿名内部类。
public interface Person{
void say();
}

public class Tom{
    public static void main(String[] args){
        Person tom=new Person(){
        @Override
        public void say(){
        System.out.println("say");};
        tom.say();
    }
}

new Person(){ }属于匿名内部类,没有名字,不能复用。
明明是个类,我可以当做函数来用。因为这个类中最关键的是类中唯一的一个方法。这个可以理解为函数式编程。

public interface Person{
void say(String msg);
}

public class Tom{
   public static void main(String[] args){
       Person tom=(msg)->{System.out.println("say"+msg);};
       tom.say();
   }
}

把以上形式成为函数式的表达方式,完全看不出类的感觉,但它依旧是匿名内部类,只是表面上看更像函数了。
这里知道传入的参数为String类型

  • 知道的内容:

通过=左边的Person我们知道匿名内部类是哪个类型的,而这个类是一个函数式接口,里面有且只有一个抽象方法,我生成出来的这个Person类就是要使用那个唯一的方法的,所以这里知道匿名内部类是Person类,那么我们就知道里面有什么方法,方法中的类型我们也是知道的,

  • 不知道的内容:
    我们不知道的是方法中传入的是哪个参数。
//只有一句话的情况,大括号可以不写。
//只有一句话的情况,返回值return可以不写
//只有一个参数的话,括号可以省略
Person tom=msg->System.out.println("say"+msg);

个人总结:
将相同的部分去掉,只展示不同的部分,如此一来最后展示的效果类似于函数。

  1. 函数与方法的区别?
    方法属于某个对象,函数独立存在。
4、Lambda表达式详解

Lambda表达式详解

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elsa~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值