接口,lambda表达式,与内部类

接口,lambda表达式,与内部类

提示:关于这部分你需要知道什么是接口,什么是lambda表达式,以及内部类,当然还有他们的一些应用


知识点总结

接口

  1. 接口 (interface), 用来描述类应该做什么,而不指定它们具体怎么做。一个类可以实现一个或多个接口。
  2. 在 Java 语言中,接口不是类,而是对希望符合这个接口的类的一组需求。
  3. 接口可以定义常量,但接口绝对不会有实例字段,在Java 8 之前接口绝对不会实现方法,但现在可以提供简单的方法了,当然这些方法绝对不能引用实例字段。
  4. 一个实现类需要做到以下两点:
    a. 将类声明为实现给定的接口。
    b. 对接口中的所有方法提供定义
  5. 要将类声明为实现某个接口,需要使用关键字 implements
class Employee implements Comparable //Employee  实现了 Comparable  接口
  1. 实现接口时必须将实现方法标记为 public。
  2. 实现类可以实现多个接口
    class Employee implements Cloneable, Comparable
  3. 有没有觉得接口和抽象类有些相似?那既然有了抽象类,为什么还需要接口呢?这是因为每个类只能扩展一个抽象类,但是每个类却可以实现多个接口,如上一条所示。
  4. 在Java 8中允许在接口中增加静态方法,只不过这有违于接口作为抽象规范的初衷,目前为止通常的做法都是将静态方法放到伴随类中。例如在标准库中,我们会看到成对出现的接口和实用工具类,如 Collection/ Collections 或 Path/ Paths。
  5. 在 Java 9 中,接口方法可以是 private。 Private 方法可以是静态方法或实例方法。但由于私有方法只能在接口中使用,所以他们用法有限,只能作为接口中其他方法的辅助方法。
  6. 默认方法:可以为接口方法提供一个默认实现。必须使用 default 修饰符标记这样一个方法。
public interface Comparable<T>
{
	default int compareTo(T other) {return 0;}
} //默认方法可以调用其他方法。
  1. 记住“类优先”规则(超类优先),已解决默认方法冲突问题:
    a. 接口冲突,两个接口同时提供了相同方法名字,类型,参数类型的方法
    超类和接口同时提供了相同方法名字,类型,参数类型的方法(类优先原则)

Lambda 表达式

  1. 这是一种很简洁的方法,用来创建可以在将来某个时间点执行的代码块。通过使用表达式可以用一种精巧而简洁的方式表示使用回调或可变行为的代码。
  2. 表达式的组成:参数,箭头(->)以及一个表达式
(String first, String second)->
{
	if (first.length() < second.length()) return -1;
	else if (first.length() > second.length()) return 1;
	else return 0;
}//有参数的例子
() -> {for (int i = 100; i >=0; i-- ) System.out.println(i); } //无参数例子,注意小括号,并且无需指定表达式返回类型,他会自己推倒出类型。
  1. 函数式接口,对于只有一个抽象方法的接口,需要这种接口的对象时,就可以提供一个 lambda 表达式,这种接口称为函数式接口:
    a. 例如Arrays.sort方法。它的第二个参数需要一个Comparator 实例, Comparator 就是一个方法的接口,所以可以提供一个 lambda 表达式:
Arrays.sort(words,
(first, second) -> first.length() - second.length());

b. ArrayList 类有一个 removeIf 方法,他的参数就是一个 Predicate 。这个接口专门用来传递 lambda 表达式。例如下边这个例子是从一个数组列表中删除所有 null 值:

list.removeIf(e -> e == null);

关于lamdba表达式还有更多深入的用法,这里只简单罗列基础的知识点,后边有时间会陆续添加

内部类

  1. 内部类定义在另一个类的内部,他们的方法可以访问包含他们的外部类的字段。内部类技术在设计具有相互协作关系的类集合时很有用。
  2. 为什么需要内部类呢?
    a. 内部类可以对同一个包中的其他类隐藏
    b. 内部类可以访问定义这个类的作用域中的数据,包括私有的数据
  3. 局部内部类:声明局部内部类是不能带有访问说明符(public, private….)
  4. 匿名内部类:创建一个类的新对象,这个类实现了xxx接口
new SuperType(construction parameters)
	{
		inner class methods and data
	}
	//superType 可以是接口或类

关于内部类还有更多深入的用法,这里只简单罗列基础的知识点,后边有时间会陆续添加。


下一篇关于异常

所有知识点参考的书籍是

《Java 核心技术 卷 I》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值