Java接口

来源:互联网 发布:gnu windows 编辑:程序博客网 时间:2024/06/01 08:38
// 接口中的成员变量默认都是public,static,final类型的,必须被显示初始化,成员方法都是public,static类型的
// 接口中不能定义实例变量,非抽象实例方法和静态方法,接口中不能有构造方法,不能被实例化。
// 一个接口不能实现另一个接口,但可以继承多个其他接口,
// 不能创建接口的实例,但是允许创建接口类型的引用变量,该变量引用实现了这个接口的类的实例
// 比较抽象类和接口,都是继承树的上层,都不能被实例化,都包含抽象方法,
// 抽象类优点就是可以包含部分方法的实现,避免子类中重复实现他们,提高代码的重用性
// 抽象类中可以添加一个具体的方法,不会对它的子类造成影响,接口就必须非常稳定,随意添加会影响所有的实现类
// 接口的优点就是一个类只能继承一个父类,这个父类极有可能是抽象类,但是一个类可以实现多个接口
// 为什么不能多继承,因为当子类覆盖父类的实例方法,或者隐藏父类的成员变量以及静态方法,java采用不同的绑定机制
// 加入还允许一个类有多个直接的父类,那么会使绑定规则变得更加复杂,因此为了简化复杂性才禁止多继承
// 而接口就不存在这个问题,因为接口中只有抽象方法,没有实例变量和静态方法,只有接口的实现类才会实现接口的抽象方法
// 一个类即使有多个接口,也不能增加java虚拟机进行动态绑定的复杂度,因为虚拟机永远不会把方法和接口绑定
// 而只会把方法与他的实现类绑定。
// 从类中抽象出新的接口很方便,但是从类中抽象出新的抽象类却不那么容易,接口更容易维护
// 接口用来打交道,而抽象类用来扩展的
// 定制服务模式,为特定类型的用户提供特定的服务,不要将所有的内容放在一个接口中,应该分成多个精粒度的接口更有利于接口的重用
// 通过对接口的继承,可以方便的生成针对特定使用者的复合接口。通过把需要的接口的实现组合到一个实现类中,可以把多个接口转换为一个复合接口
// 类似于对象适配器的作用。
// 适配器模式,例如笔记本电脑只接受15V的电压,不能和220V的电源插座链接,而电源适配器就能够把220V的电压转换为15V,它是笔记本与普通电源的桥梁
// 适配器的作用就是进行接口转换,适配器的两种实现:1.继承实现方式
// public class TargetImpl extends SourceImpl implements TargetIFC 这样就能通过TargetIFC中的方法调用SourceImpl中的方法,实现适配
// 2.组合实现方式,此时不需要继承了,可以将SourceImpl当作属性放入TargetImpl中,两者相比,应该优先考虑组合关系来实现适配器
// 默认适配器模式,awt包中定义了许多事件监听接口,例如windowListener和MouseListener,而这些接口中定义了很多方法,如果要实现它就必须实现接口中的所有方法
// 为了简化编程,JDK为MouseListener提供了一个默认适配器MouseAdapter,他实现了MouseListener接口,为所有的方法提供空实现,用户自定义的MyMouseListener
// 监听器可以继承MouseAdapter,此时只要覆盖特定的方法。
// 代理模式,代理类和委托类有同样的接口,代理类主要负责为委托类预处理消息,过滤消息以及把消息转发给委托类,代理类和委托类之间为组合关系,
// 例如:出租人Renter和代理人Deputy都具有RenterIFC接口,Tenant类代表租凭人
// 标识类型模式,动物饲养员Feeder类的feed(Animal animal, Food food)方法,而接口Food没有任何方法,没有实现Food接口的任何类都是不符合要求的,将参数改为Object也是合法的,
// Food接口被定义为标识类型接口,这个接口没有任何方法,仅仅代表一个抽象类型,JDK中如下两个典型的标识类型接口,一个是序列化Serializable,一个是可以作为远程对象的Remote
// 常量接口模式,将相关的常量放在一个专门的常量接口中,一个普通类可以通过接口名.常量名来使用,而实现了该接口的类可以直接使用常量名来调用,为了避免一些问题,可以通过import static mypack.MyConstants.*来直接引入MyConstants接口中的静态变量
// 它无需实现MyConstants接口,就能直接通过常量名来访问,而无需通过接口名.常量名的方式来引用
0 0
原创粉丝点击