接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。通用接口建立起一种基本形式,以此表示所有导出类的共同部分。
包含抽象方法的类叫抽象类。如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的。
interface关键字产生一个完全抽象的类,他根本没有提供任何具体实现。它允许创建者确定方法名,参数列表和返回值,但是没有任何方法体。接口只提供了形式,而未提供任何具体实现。接口定义了类与类之间的协议。接口可以包含域,但这些域隐是地是static和final的。
当要实现一个接口时,接口中被定义的方法必须被定义为public;否则它们只能得到默认的包访问权限,这样在方法被继承的过程中,其访问权限就被降低了,这是java编译器所不允许的。
策略模式:创建一个能根据所传递的参数对象的不同而具有不同行为的方法。这类方法包含了所有执行的算法中固定不变的部分,而策略包含变化的部分,策略就是传递进去的参数,他包含要执行的代码。
一个类可以继承多个接口,并可以向上转型为每个接口。
使用接口的原因:为了能向上转型为多个基类型;与抽象基类相同,防止客户端程序猿创建该类的对象。
如果创建不带任何方法定义和成员变量的基类,就应该选择创建接口而不是抽象类。
工厂模式
interface Service{ void method1(); void method2(); } interface ServiceFactory{ Service getService(); } public class ServiceImpl1 implements Service{ void method1(){} void method2(){} } public class ServiceFactoryImpl1 implements ServiceFactory{ Service getSerivce(){ return new ServiceImpl1(); } } public class ServiceImpl2 implements Service(){ void method1(){} void method2(){} } public class ServiceFactoryImpl2 implements ServiceFactory{ Service getService(){ return new ServiceImpl2(); } } public class Factories{ public static void serviceConsumer(ServiceFactory serviceFactory){ Service service = serviceFactory.getService(); service.method1(); service.method2(); } public static void main(String[] args){ serviceConsumer(new ServiceFactoryImpl1()); serviceConsumer(new ServiceFactoryImpl2()); } }
}