接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。
1.抽象类和抽象方法
- 抽象类,是普通的类与接口之间的一种中庸之道.
- 抽象方法:仅有声明而没有方法体.
- 抽象类:包含抽象方法的类.如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的.
- 如果从一个抽象类继承,并想创建该新类的对象,那么久必须为基类中的所有抽象方法提供方法定义。如果不这样做,那么导出类便也是抽象的,且编译器将会强制用abstract关键字来限定这个类.
- 创建没有任何抽象方法的抽象类:阻止产生这个类的任何对象.
2.接口
- interface关键字产生一个完全抽象的类,它没有提供任何具体实现.它允许创建者确定方法名、参数列表和返回类型,但是没有任何方法体(接口之提供;额形式,二尾提供任何具体实现).
- 一个接口表示:所有实现了该特定接口的类看起来都像这样(接口被用来建立类与类之间的协议).
- 接口可以包含域,但是这些域隐式地是static和final的.
- 要让一个类遵循某个特定接口(或者是一组接口),需要使用implements关键字.
- 在接口中,方法默认是public的.当要实现一个接口时,接口中被定义的方法必须被定义为是public的.
3.完全解耦
- 创建一个能够根据所传递的参数对象的不同而具有不同行为的方法,被称为策略设计模式.
- 适配器设计模式:适配器中的代码将接受你所拥有的接口,并产生你所需要的接口.
- 将接口从具体的实现中解耦使得接口可以应用于多种不同的具体实现,因此代码也就更具可复用性.
4.Java中的多重继承
- 使用接口的核心原因:为了能够向上转型为多个基类型(以及由此带来的灵活性).
- 第二个原因:防止客户端程序员创建该类的对象,并确保这仅仅是建立一个接口.
- 如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类.事实上,如果知道某事物应该成为一个基类,那么第一选择应该是使它成为一个接口.
5.通过继承来扩展接口
- 通过继承,可以很容易地在接口中添加新的方法声明,还可以通过继承在新接口中组合数个接口,这两种情况都可以获得新的接口.
- 一般情况下,只可以将extends用于单一类,但是可以引用多个基类接口,只需用逗号将接口名一一隔开即可.
- 在打算组合的不同接口中使用相同的方法名通常会造成代码可读性的混乱,请尽量避免这种情况.
6.适配接口
- 接口允许同一个接口具有多个不同的具体实现.在简单的情况中,他的体现形式通常是一个接受接口类型的方法,而该接口的实现和向该方法传递的对象则取决于方法的使用者.
7.接口中的域
- 在Java SE5之前,在的接口中定义域(static&final)是产生于enum具有相同效果的类型的唯一途径.
- 在接口中定义的域不能是"空final",但是可以被非常量表达式初始化.
- 域不是接口的一部分,它们的值被存储在该接口的静态存储区域内.
8.嵌套接口
- 接口可以嵌套类或其他接口中.
- 嵌套在另一个接口中的接口自动就是public的,而不能声明为private的.
- 当实现某个接口时,并不需要实现嵌套在其内部的任何接口.
- private接口不能再定义它的类之外被实现.
9.接口与工厂
- 接口是实现多重继承的途径,而生成遵循某个接口的对象的典型方式就是工厂方法设计模式.
- 与直接调用构造器不同,在工厂对象上调用的是创建方法,而该工厂对象将生成接口的某个实现的对象.
- 理论上,通过这种方式,我们的代码将完全与接口的实现分离,这就使得我们可以透明地将某个实现替换为另一个实现.
END
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。