Java核心技术卷感悟:第六章 接 口 lambda 内部类


接口:

接口( interface) 技术, 这种技术主要用来描述类具有什么功能,而并不 给出每个功能的具体实现。一个类可以实现( implement) —个或多个接口,并在需要接口的 地方, 随时使用实现了相应接口的对象。

  1. 接口不是类,而是对类的一组需求描述,这些类要遵从接口描 述的统一格式进行定义。
  2. 接口中的所有方法自动地属于 public。 因此,在接口中声明方法时,不必提供关键字 public 。
  3. 要将类声明为实现某个接口, 需要使用关键字 implements: class Employee implements Comparable
  4. 接口不是类,尤其不能使用 new 运算符实例化一个接口,然而, 尽管不能构造接口的对象,却能声明接口的变量,接口变量必须引用实现了接口的类对象
  5. 使用抽象类表示通用属性存在这样一个问题: 每个类只能扩展于一个类。假 设 Employee 类已经扩展于一个类, 例如 Person, 它就不能再像下面这样扩展第二个类了。接口可以提供多重继承的大多数好处,同时还能避免多重继承的复杂性和低效性。
  6. 回调( callback) 是一种常见的程序设计模式。在这种模式中,可以指出某个特定事件发 生时应该采取的动作。

lambda 表达式:

lambda表达式,这是 一种表示可以在将来某个时间点执行的代码块的简洁方法。使用 lambda 表达式,可以用一 种精巧而简洁的方式表示使用回调或变量行为的代码。

  1. lambda 表达式是一个可传递的代码块, 可以在以后执行一次或多次。
  2. lambda 表达式就是一个代码块, 以及必须传入 代码的变量规范。
  3. 一种 lambda 表达式形式:参数, 箭头(->) 以及一个表达式。如 果代码要完成的计算无法放在一个表达式中,就可以像写方法一样,把这些代码放在 {}中, 并包含显式的 return语句。(String first, String second) -> first.length() - second.length()
  4. 对于只有一个抽象方法的接口, 需要这种接口的对象时, 就可以提供一个 lambda 表达 式。这种接口称为函数式接口
  5. 下面考虑 Arrays.sort 方法。它的第二个参数需要一个 Comparator 实例, Comparator 就是只有一个方法的接口, 所以可以提供一个 lambda 表达式Arrays.sort (words, (first, second) -> first.length() - second.length()) ;

内部类:

内部类( inner class) 机制。理论上讲,内部类有些复杂, 内部类定义在另 外一个类的内部, 其中的方法可以访问包含它们的外部类的域。内部类技术主要用于设计具 有相互协作关系的类集合

  1. 内部类方法可以访问该类定义所在的作用域中的数据, 包括私有的数据
  2. 内部类可以对同一个包中的其他类隐藏起来
  3. 当想要定义一个回调函数且不想编写大量代码时,使用匿名 (anonymous) 内部类比较 便捷
  4. 假如只创建这个类的一个对象,就不必命名了。这种类被称为匿名内部类
  5. 在内部类不需要访问外围类对象的时候, 应该使用静态内部类。 有些程序员用嵌 套类 (nested class) 表示静态内部类。与常规内部类不同,静态内部类可以有静态域和方法。声明在接口中的内部类自动成为 static 和 public 类。


0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP