[转]Java接口的作用
今天和同事好好的讨论了下接口的原理和作用, 发现原来自己的对接口的理解仅仅是局限在概念的高度抽象上, 觉得似乎理解了但是不会变化使用其实和没有理解差不多。 以前看一个帖子说学习一个东西不管什么时候都要带着“这个东西是什么?”、“这个东西有什么作用?”和“这个东西怎样用?”三个问题, 这三个问题回答下去了阐明你对这个事物的理解到达了一定的高度。 今天还有一个比拟深的阅历是要学习到知识就要多和人交流。 就像以前某个管理人员说得“要疯狂的交流”。 现在关于今天学到的接口局部做一个详细地总结: 接口的概念其实并不难理解, 接口关键字Interface, 在使用时可以只定义函数体而不需求详细的实现。 再类的继承过程中可以实现多个接口而取代了类的多继承。 使用接口其实就有点像实现虚函数的调用一样, 用继承接口的子类实例化声名得借口就可以经过接口调用子类外部接口定义的函数。 使用这种接口方式编程, 如果业务逻辑发生变化需求新增类多办法, 就可以再不改动原来已经写好的代码基础上新增一个类来实现接口中定义的函数来实现。 详细办法请看下面两个例子: 1、JAVA多态接口动态加载实例 用来计算每一种交通工具运转1000公里所需的工夫, 已知每种交通工具的参数都是3个整数A、B、C的表达式。 现有两种工具: Car 和Plane, 其中Car 的速度运算公式为:A*B/C Plane 的速度运算公式为:A+B+C。 需求编写三类:ComputeTime. java, Plane. java, Car007. java和接口Common. java, 要求在未来如果添加第3种交通工具的时候, 不必修正以前的任何程序, 只需求编写新的交通工具的程序。 其运转过程如下, 从命令行输入ComputeTime的四个参数, 第一个是交通工具的类型, 第二、三、四个参数分别时整数A、B、C, 举例如下: 计算Plane的工夫:"java ComputeTime Plane 20 30 40" 计算Car007的工夫:"java ComputeTime Car007 23 34 45" 如果第3种交通工具为Ship, 则只需求编写Ship. java, 运转时输入:"java ComputeTime Ship 22 33 44" 提示:充沛应用接口的概念, 接口对象充当参数。 实例化一个对象的另外一种办法:Class. forName(str). newInstance();例如需务实例化一个Plane对象的话, 则只要调用Class. forName("Plane"). newInstance()便可。 Java代码 import CalTime. vehicle. all. Common; import java. lang. *; public interface Common . . . { double runTimer(double a, double b, double c); } public class Plane implements Common . . . { public double runTimer(double a, double b, double c) . . . { return (a+ b + c); } } public class Car implements Common . . . { public double runTimer(double a, double b, double c) . . . { return ( a*b/c ); } } public class ComputeTime . . . { public static void main(String args[]) . . . { System. out. println("交通工具: "+args[0]); System. out. println(" 参数A: "+args[1]); System. out. println(" 参数B: "+args[2]); System. out. println(" 参数C: "+args[3]); double A=Double. parseDouble(args[1]); double B=Double. parseDouble(args[2]); double C=Double. parseDouble(args[3]); double v, t; try . . . { Common d=(Common) Class. forName("CalTime. vehicle. "+args[0]). newInstance(); v=d. runTimer(A, B, C); t=1000/v; System. out. println("均匀速度: "+v+" km/h"); System. out. println("运转工夫:"+t+" 小时"); } catch(Exception e) . . . { System. out. println("class not found"); } } } 以前看过一个求形状的标题就是有两个圆形求交集现在定义了两种状况问要是扩展大别的状况该当怎样设计, 想了很久不得其解, 现在突然觉得接口通杀矣~ 2、JAVA接口作为参数传递 可以将接口类型作为方法参数, 在使用时可以将实现了接口的类传递给方法,实际调用的是实现类中的方法代码体, 这样便根据传入的参数的不同而实现不同的功能。 重要的是, 当我当前需要另外一个对象并且拥有承受所声明的方法的时候, 我们不必须原类, 只需新的类实现接口即可。 Java代码 import java. lang. *; interface Extendbroadable . . . { public void inPut(); } class KeyBroad implements Extendbroadable . . . { public void inPut() . . . { System. out. println(" hi, keybroad has be input into then mainbroad! "); } } class NetCardBroad implements Extendbroadable . . . { public void inPut() . . . { System. out. println(" hi, netCardBroad has be input into then mainbroad! "); } } class CheckBroad . . . { public void getMainMessage(Extendbroadable ext). . . { ext. inPut(); } } public class InterfaceTest01 . . . { public static void main(String []args) . . . { KeyBroad kb=new KeyBroad(); NetCardBroad ncb=new NetCardBroad(); CheckBroad cb=new CheckBroad(); cb. getMainMessage(kb); cb. getMainMessage(ncb); } }文章由 jiyizhen-buy.com 保健枕 整理,收集辛苦,希望能保留出处。 |