包和接口


这是《Java8编程参考官方教程》的第9章

接口和抽象类很相似,但一个类可以实现多个接口;类只能继承单个超类(抽象类或其他类)。

包:用于保持类的名称空间相互隔离,不会发生命名冲突。

private和public大家都知道。protected对同一个包内的类和不同包内的子类可见。无访问修饰符则只对同一个包内的类可见。

接口(interface):接口断开了一个方法或一系列方法的定义与继承层次之间的关联。这是接口的真正功能所在。
在JDK 8之前,接口只能定义“有什么”,JDK 8之后,可以在接口方法中添加默认实现。

在实现接口的类里,实现接口的方法必须被声明为public。

InterfaceClass c = new ImplementsClass();那么c调用的是ImplementsClass里的方法,但是c不能访问ImplementsClass类的其他任何成员。接口引用变量c只知道由接口声明的方法。(多态就是这个意思,在这里是通过接口引用变量访问接口的多个实现)。

如果类包含了一个接口,但是没有实现该接口定义的全部方法,那么必须将类声明为abstract。派生自此类的所有类还都必须实现接口定义的方法,或者被声明为abstract。

嵌套接口:可以被声明为public、private或protected。而顶级的接口,只能是public或者默认访问级别。当在封装范围之外使用嵌套接口时,必须使用包含嵌套接口的类或接口的名称进行限定。

接口中的变量:如果接口中声明有变量,那么变量是final的,并且需要初始化。

接口可以扩展:如果类实现的接口继承自另外一个接口,那么类必须实现在接口继承链中定义所有的方法。

默认接口方法:JDK 8新增的功能。但此功能并没有改变接口的关键特征:不能维护状态信息。这也是接口和类的决定性的区别。默认方法的声明前面必须带有关键字Default。
默认方法的优点: 
  1.   优雅地随时间演化接口。
  2. 提供可选功能,但是类不必在不需要功能时提供占位符实现。

多级继承的问题:Java不支持类的多级继承。
当一个类实现了多个接口,并且有几个接口提供了同名的方法并且都有默认实现时,会出现冲突,Java定义了以下规则:
  1. 类实现的优先级高于接口的默认实现。
  2. 如果类没有重写这个重名的默认实现,则会出现错误。
  3. 如果是一个接口继承了另一个接口的情况,则继承接口的版本具有更高优先级。
  4. 可以使用super显式引用被继承接口中的默认实现。


在接口中使用静态方法:这是JDK 8的新增功能。接口定义的静态方法可以独立于任何对象调用。因此,在调用静态方法时,不需要实现接口,也不需要接口的实例。通过使用接口名,后跟句点,然后是方法名,就可以调用静态方法。
实现接口的类或子接口不会继承接口中的静态方法。

p.s.我也想写得有次序一点、好看一点,但是... ...

posted @ 2016-06-19 11:08  StevenLuke  阅读(447)  评论(0编辑  收藏  举报