java核心技术卷Ⅰ(一)基础回顾(第六章接口与内部类、lambda表达式)

本文介绍了Java 8中接口的升级,包括默认方法的应用、静态方法的限制,以及lambda表达式的使用,展示了如何处理接口冲突和简化匿名内部类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

读书读着读着感觉实在难吸收,从第五章反射部分的内容开始书和视频结合着学习,故以下部分内容源于尚硅谷及java1234。

一.接口

1.既有父类又继承了接口,当父类与接口有同名变量时,分别调用的方法如下:

接口中定义的变量省略了public static final,为常量,故在子类中无法修改ball对象。

2.java8中接口的新特性

接口中可以实现default 方法,即子类可以选择不重写该方法,为代码后期的更新提供了便捷。 其调用必须通过实现类的对象才可以调用。

接口中定义的static方法,子类实现类都无法调用(直接显示undifined),只有接口自己可以调用。

若接口与父类中出现了同名同参数的方法,在没有重写的情况下,子类将调用父类的方法。

如果实现类同时实现了多个接口且这多个接口中有同名的default(默认)方法,要重写该方法,不重写的话会报错接口冲突。

二.内部类

1.实例化内部类:静态类:在调用内部类的构造方法时同时需要外部的调用。

非静态类,先有外部类的对象。

 

如此例中dog是person的静态内部类,bird是person的非静态内部类。

2. 成员的内部类中调用外部类的结构。

 

3.匿名内部类:
简单说,就是没有名称的内部类,当一个接口只有一个抽象方法,我们不想要通过子类来实现,比较麻烦,可以使用匿名内部类。

 

下面的例子中,传统的实现方式是,新建一个dog类继承抽象类animal并在其中重写animal类的eat方法,然后再main函数中新建dog类的对象,调用重写后的eat方法显示狗吃肉。而使用匿名类的两种方法相当于创建了抽象类的对象,并在其中直接重写抽象方法,然后直接调用eat方法。

另外,在匿名类外部的局部便令,如果匿名内部类想要访问,无法修改,因为其默认为final。

 上面是抽象类的匿名内部类使用,下面为接口:(接口的对象,作为方法参数进行传递)

 

 

三.lambda表达式  

 lambda表达式是一个可传递的代码块,可以在以后执行一次或多次。用来替代匿名内部类。本质是一个函数。

eg(java1234)

下面的例子里面,使用lambda表达式代替匿名内部类,在括号中实现了抽象方法,此后直接通过接口的对象调用重写后的方法。

 

 一些精简的语法:①参数类型可以省略

②只有一个参数的时候,小括号()可省略

③只有一条语句的时候大括号{}可以省略。

④如果那一条语句是return……,则要省略return。

 在lambda表达式中有时需要调用其它方法,语法为 对象::方法名

接口的实现是通过构造方法实现的,那么语法为类名::new。

 另外,与匿名内部类类似,lambda表达式所捕获的外部变量同样默认为final,在lambda表达式内不能对其修改。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值