第九章接口

1、接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。
9.1 抽象类和抽象方法
1、包含抽象方法的类叫做抽象类。如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的。
2、如果从一个抽象类继承,并向创建该新类的对象,那么就必须为基类中的所有抽象方法提供方法定义。如果不这么样做(可以选择不做),那么导出类便也是抽象类,且编译器将会强制用abstract关键字来限定这个类。
9.2 接口
1、可以在interface关键字前面添加public关键字(但仅限于该接口在与同名的文件中被定义)。如果不添加public关键字,则它只具有包访问权限,这样它就只能在同一个包内可用。
2、可以选择在接口中显示地将方法声明为public的,但即使不这么做,它们也是public的。因此,当要实现一个接口时,在接口中被定义的方法必须被定义为时public的;否则,它们将只能得到默认的包访问权限,这样在方法被继承的过程中,其访问权限就被降低了。
9.3 完全解耦
1、复用代码的第一种方式是客户端程序员遵循该接口来编写他们自己的类。
2、遇到无法修改想要使用的类,可以使用适配器设计模式。设配器中的代码将接受你所拥有的接口,并产生你所需要的接口。
9.4 J ava中的多重继承
1、在导出类中,不强制要求必须有一个是抽象的或“具体的”(没有任何抽象方法的)基类。如果要从一个非接口的类继承,那么只能从一个类去继承。其余的基元素都必须是接口。需要将所有的接口名都置于implements关键字之后,用逗号将它们一一隔开。可以继承任意多个接口,并可以向上转型为每个接口,因为每一个接口都是一个独立类型。
2、当通过这种方式将一个具体类和多个接口组合到一起时,这个具体类必须放在前面,后面跟着的才是接口。
3、实现某个接口的类可以被向上转型为每一个接口。
4、使用接口的核心原因:为了能够向上转型为多个基类型(以及由此带来的灵活性)。使用接口的第二原因与使用抽象基类相同:防止客户端程序员创建该类的对象,并确保这仅仅是建立一个接口。
5、抽象类和接口的选择:如果要创建不带任何方法定义和成员变量的基类,那么选择接口而不是抽象类。事实上,如果知道某事物应该成为一个基类,第一选择应该是使它成为一个接口。
9.5 通过继承来扩展接口
1、一般情况下,只可以将extends用于单一类,但是可以引用多个基类接口。只需要将接口名一一分隔开即可。
9.5.1组合接口时的名字冲突
1、打算组合的不同接口中 使用相同的方法名通常会造成代码可读性的混乱。
9.6 适配接口
1、接口吸引人的原因之一就是允许同一个接口具有多个不同的具体实现。在简单的情况中,它的体现形式通常是一个接受接口类型的方法,而该接口的实现和向该方法传递的对象则取决于方法的使用者。
2、可以在任何现有类之上添加新的接口。所以这意味着让方法接受接口类型,是一种让任何类都可以对该方法进行适配的方式。这就是使用接口而不是类的强大之处。
9.7 接口中的域
9.7.1 初始化接口中的域
1、在接口中定义的域不能是“空final”,但是可以被非常量表达式初始化。
9.8 嵌套接口
1、接口可以嵌套在类或其他接口中。
2、嵌套在另一个接口中的接口自动就是public的,而不能声明为private的。
9.9 接口与工厂
1、接口是实现多重继承的途径,而生成遵循某个接口的对象的典型方式就是工厂方法设计模式。这与直接调用构造器不同,在工厂对象上调用的是创建方法,而工厂对象将生成接口的某个实现的对象。
9.10总结

猜你喜欢

转载自blog.csdn.net/panda_____/article/details/80274757