接口和内部类提供将接口和实现分离的更加结构化的方法。
建立通用接口的唯一理由:不同的子类可以用不同的方法表示此接口。
接口拥有:public和“包访问”两种可视性,适用于嵌套接口,非嵌套接口。新添加:private
抽象基类简称抽象类
抽象方法机制:仅有声明没有方法体,abstract void f();包含抽象方法的类叫抽象类。如果一个类包含一个或多个抽象方法这个类就是抽象类。但是抽象类不一定就必须有抽象方法。
抽象类是不完整的所以不能创建对象,不然编译器会报错。如果继承抽象类,那么就必须为基类中的所有抽象方法提供方法定义,否则导出类也是抽象类,并且编译器会强制我们用abstract关键字限定导出类。
抽象类和抽象方法用处:使类的抽象性明确,并告知程序员和编译器如何使用。抽象类还是个重构工具,很容易的将公共方法沿着继承层次结构向上移动。
接口
interface关键字使得类更加抽象。
抽象和接口:
abstract允许在类中创建一个或多个没有任何定义的方法-提供接口部分,但是没有提供任何具体实现。实现由继承者创建。
interface产生一个完全抽象的类,没有提供具体实现,只允许创建者确定方法名,参数列表和返回类型,没有任何方法体。极度抽象的类允许通过创建一个能够向上转型为多种基类的类型,可以实现多重继承。接口中的域隐式的static和final的。
implements:让类遵循某个或一组接口。表示:interface知识外貌,但是implements声明如何工作。如果实现了接口的类九百昵称了普通类,可以扩展它。
完全解耦
策略设计模式:创建一个能够根据所传递的参数对象的不同而具有不同行为的方法。“策略”包含变化的部分,方法包含所要执行的算法中固定不变的部分。
适配器设计模式:接受所拥有的接口,产生所需要的接口。
将接口从具体实现中解耦使得接口可以应用于多种不同的具体实现,代码会更可复用。
多重继承
概念:组合多个类的接口的行为。
将所有的接口名都置于implements关键字之后 。当组合了具体类和接口时需要将具体类放在前面,后面跟着接口,否则编译器会报错。
使用接口的核心原因:向上转型为多个基类型,由此带来灵活性。第二个原因:与使用抽象基类相同,防止客户端程序员创建该类的对象。
继承
通过继承可一在接口中添加的方法声明
,也可以在新接口中组合多个接口。在组合不同接口中使用相同的方法名通常会造成代码可读性的混乱。相同的方法也就是返回值,方法名,参数是相同 不会有什么问题。但是如果签名或者返回类型不同就会出现报错,编译器就会提示编译不通过。
接口中的域默认都是public,在SE5之后,enum关键字完全可以替代接口中的域。域并不属于接口,他的值被存储在接口的静态存储区域内。
嵌套接口
接口可以嵌套在类或者其他接口中。private嵌套接口:实现private接口只是一种方式,它强制该接口中的方法不能添加任何类型信息,不允许向上转型。当实现某个接口时,并不需要实现嵌套再其内部的任何接口,private接口不能再定义它的类之外被实现。
接口与工厂
工厂方法设计模式:生成遵循某个接口的对象的典型方式。不是直接调用构造器,而是创建方法,该工厂对象将生成接口的某个实现的对象,通过这种方式,接口和接口的实现分离,可以让某个实现替换为另一个实现。
总结:恰当的优先选择类而不是接口,从类开始如果接口的必须行非常明确那么就需要重构。
网友评论