1.接口与类
类与类之间可以是继承关系,而接口与类之间是实现关系。非抽象类实现接口时,必须把接口里面的所有方法实现。类实现接口用关键字implments,一个实现类可以同时实现多个接口。
下面定义的KeyBoad类和Mouse类都实现了上面的USB接口。两个类在实现USB接口时,需要把USB接口中的startWork()及stopWork()(即接口中所有抽象方法)的方法体进行实现,否则类中会有从USB接口中继承过来的抽象方法,这样类就只能定义成抽象类。具体实现如下:
由于接口中存在抽象方法,因此接口类似于抽象类,不能实例化对象,但可以定义引用,并且在Java规范中允许接口引用变量指向实现类对象,在实际中抽象类和接口都可以作为多态中的父类引用类型。即当有接口引用指向了实现类对象,则可以用接口引用调用到实现类中实现了的接口中的方法。
如:
USB usbDevice=new KeyBord();
usbDevice.startWork();
调用到的startWork()方法是KeyBoard类中的startWork()方法。
虽然接口和抽象类不能实例化对象,但可以定义引用来指向实现类对象,并实现多态,达到扩展程序功能的效果,并满足“开-闭”原则。
下面的Computer类中定义了useUSB方法,其中的useUSB(USB usbDevice)方法参数用接口引用作为参数,usbDevice可接收USB实现类的对象,调用实现类中的实现方法,实现多态。在主类Example5_15的主方法中,使用Computer类调用静态方法useUSB()方法,并传递USB实现类对象,当传递不同的对象,其USB接口将按照实现类中的实现方法进行执行。
【例5.15】(www.daowen.com)
在上述程序中,如果需要扩充计算USB接口的使用功能,如需要使用U盘实现数据的存取,则只需要程序中再添加一个UDisk类实现USB接口,再在主类中使用UDisk对象进行测试即可,因此程序的扩展性强。
在Java中多态的实现可以通过父类引用,抽象类引用指向子类对象,或接口引用指向实现类对象来实现,但为什么要用接口而不用继承关系来实现多态,其原因有以下两点:
(1)Java规范是单继承,多接口。
Java中是单继承,即一个类只能有一个直接父类,如果要扩展功能只能从一个类进行扩展,有局限性,但一个类可以实现多个接口,因此可以在多个接口的基础上进行功能扩展。
(2)接口与实现类间有约束关系。
接口中的非静态方法一定是抽象方法,因此类在实现接口时,是一种强制实现,不实现接口定义的抽象方法,会报编译错误,因此实现类要么全部实现接口中的方法,要么该类必须定义成抽象类,因此实现类与接口间存在着一种约束关系。
2.接口可以从其他接口继承
接口与接口之间可以存在继承关系,而且接口间可以是多重继承关系,即一个接口既可以从一个接口继承,也可以从多个接口继承。
上面例子中,IC接口同时从IA、IB两个接口派生,因此在IC中虽然没有定义任何属性和方法,但由于继承的关系,在IC中存在IA和IB两个接口中的抽象方法funA()和funB()。因此,若有类实现IC接口,则必须要实现继承过来的funA()和funB()方法,否则编译错误。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。