为什么不支持多重继承:依据Sun的官方说法是,避免c++那样管理多重继承的层次关系而带来的复杂性
(主要是在多态覆盖方法的时候采用的动态绑定机制),换成用接口来实现多重继承的大部分功能,一个
类只能有一个父类,但可以有多个接口,以此对多继承提供了有力的支持。
2.类中声明了系统可以提供的服务,类似于电路中的模块,但是不包含具体的实现。例如:
public interface Photographable{ public void takePhoto(); } |
3.接口中的成员变量默认都是public、static、final类型,因此必须被显示初始化。方法默认都是
public、abstract。这是必须遵守的。
4.接口没有构造方法,不能被实例化。
5.一个接口不能实现另一个接口,但是它可以继承多个接口。例如:
public interface C extends A,B{ void methodC(); } |
6.接口必须通过类来实现它的抽象方法,例如:
public class Glass implements Transparency{...} |
要是一个类要实现某个接口时,它必须实现接口中所有的抽象方法,除非这个类被定义为抽象类。
7.允许定义接口类型的引用变量去引用实现了该接口的类的实例:
Transparency t=new Glass(); |
8.抽象类与接口都是位于继承树的上方,都不能被实例化,都可以包含抽象方法。但前者可以提供默认实
现,而后者则必须包含抽象方法。接口一旦确定就不能随意改动了,否则就带来太大的麻烦。接口不要求
它的实现类在语义上是同一种类型,所以要是非同类型的相同方法类型则使用接口,利于继承树的合理化
。接口是系统最高层次的抽象类型。而抽象类则是介于“抽象”和“实现”之间的半成品,抽象类力所能
及地完成了部分实现。定制模式就是一种接口颗粒度细化的设计模式。
9.适配器模式:
当两个系统的接口不匹配的时候使用。采用组合关系来实现较好。这就类似于平时使用的笔记本电脑适配
器。而在JAVA中有许多实现了接口的默认适配器类,例如MouseListener提供了一个默认适配器
MouseAdapter类,继承这个类然后覆盖相应方法即可。
10.代理模式:
代理的共同特征是可以替代委托人去和第三方通信,对信息进行初步判断后转发或过滤消息,但是不能取
代委托人的任务。常用于对象分布在不同的机器上时,为了节约通信而进行的本地代理。
11.标志类型模式:
作为某种东西,比如食物,而单独抽象出来的一个接口(里面是空的),在方法中只有传入该类型的变量
才允许。也就是说,保护了方法的可实施性。在JAVA中的两个典型例子是,java.io.Serialize接口和
java.io.Remote接口。
12.常量接口模式:
相关的常量放在专门的一个常量接口中定义,使用import static XXX进行静态引用。