关闭

Java在线教程——接口篇

发表于:2013-1-24 09:19

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:@philhu    来源:51Testing软件测试网采编

  使用接口类型

  在你定义一个新的接口时,你其实在定义一个新的引用类型。在你能使用数据类型名称的地方,都可以使用接口名称。如果你定义了一个类型为接口的引用变量,该变量能指向的对象所在的类必须实现了该接口。

  下例是一个在一对对象中返回较大对象的方法:

  1. public Object findLargest(Object object1, Object object2) {  
  2.    Relatable obj1 = (Relatable)object1;  
  3.    Relatable obj2 = (Relatable)object2;  
  4.    if ((obj1).isLargerThan(obj2) > 0)  
  5.       return object1;  
  6.    else 
  7.       return object2;  
  8. }

  通过把数据类型object1转换成Relatable,对象obj1可以调用isLargerThan方法。

  同理,只要是实现了Relatable的类,也可以使用下面的方法。

  1. public Object findSmallest(Object object1, Object object2) {  
  2.    Relatable obj1 = (Relatable)object1;  
  3.    Relatable obj2 = (Relatable)object2;  
  4.    if ((obj1).isLargerThan(obj2) < 0)  
  5.       return object1;  
  6.    else 
  7.       return object2;  
  8. }  
  9. public boolean isEqual(Object object1, Object object2) {  
  10.    Relatable obj1 = (Relatable)object1;  
  11.    Relatable obj2 = (Relatable)object2;  
  12.    if ( (obj1).isLargerThan(obj2) == 0)  
  13.       return true;  
  14.    else 
  15.       return false;  
  16. }

  这些方法适用于任何“Relatable”的类,而无关它们的继承关系。实现了Relatable的类,它们既属于自身(或者父类)的类型,也属于Relatable类型。这使得它们具有了多重继承的优点,因为它们可以同时具备父类和接口的行为。

  重写接口

  假设你开发了一个接口名为DoIt:

  1. public interface DoIt {  
  2.    void doSomething(int i, double x);  
  3.    int doSomethingElse(String s);  
  4. }

  然后,你想加入一个新的方法在这个接口里,因此代码变成:

  1. public interface DoIt {  
  2.    void doSomething(int i, double x);  
  3.    int doSomethingElse(String s);  
  4.    boolean didItWork(int i, double x, String s);  
  5. }

  如果你这么修改了,所有实现了旧的DoIt接口的类都会出错,因为它们不再正确的实现这个接口。所有使用这个接口的程序员会严重抗议你的修改。

  你需要预估你的接口用户的需求,并从开始就完善的设计好这个接口。但是这常常是无法做到的。另一个解决方法就是再写一个接口。例如,你可以写一个DoItPlus的接口继承原有的接口。

  1. public interface DoItPlus extends DoIt {  
  2.    boolean didItWork(int i, double x, String s);  
  3. }

  现在你的用户可以选择继续使用旧接口DoIt,或是升级的新接口DoItPlus。

  总结

  接口就是两个对象间的沟通协议。

  一个接口的声明包含一些方法的签名(signatures),但不需要实现它们;也可能含有一些常量。

  实现某接口的类必须实现该接口所声明的所有的方法。

  在任何使用类型名称的地方都可以使用接口的名字。

33/3<123
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号