第六章 接口、lambda表达式与内部类
6.1接口
- 接口是Java中最重要的概念,可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。
- 接口的格式:
1 | interface interfaceName { |
- 接口的实现也必须通过子类,使用关键字implements,而且接口是可以多实现的。
- 接口被子类继承,子类(如果不是抽象类)必须重写接口中的所有抽象方法。
- 一个子类可以同时继承抽象类和实现接口
- 一个接口不能继承一个抽象类,但是却可以通过extends关键字同时继承多个接口,实现接口的多继承。
- 允许声明接口的变量,但该接口变量必须引用实现了该接口的类对象。
- 接口里定义的变量自动是
public static final
的,也即接口内只能定义常量。 - 接口内不能包含实例域或静态方法。
解决默认方法冲突。
如果先在一个接口中将一个方法定义为默认方法,然后又在超类或另一个接口中定义了一个同样的方法,结果会是怎样?
规则如下:
1)超类优先。如果超类提供了一个具体方法,同名而且有相同参数类型的默认方法(接口中的默认方法)会被忽略。
2)接口冲突。如果一个超接口提供了一个默认方法,另一个接口提供了同名而且参数类型(无论是否为默认参数)相同的方法,必须在实现类中覆盖这个方法来解决冲突。
回调(callback)是一种常见的程序设计模式。在这种模式中,可以指定某个特定事件发生时该采取的动作。
6.2lambda表达式
基本语法:
1
2
3(parameters) -> expression
或
(parameters) ->{ statements; }虽然看着很先进,其实Lambda表达式的本质只是一个”语法糖”,由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能。但建议不要乱用,因为这就和某些很高级的黑客写的代码一样,简洁、难懂、难以调试,维护人员想骂娘。
6.3内部类
内部类(inner class)是定义在另一个类中的类。