首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 认证考试-> 微软认证
漫谈Java程序设计中的接口应用-JSP教程,Java技巧及代码
作者:网友供稿 点击:11
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
语言提供了一种接口(interface)机制。这种接口机制使java的面向对象编程变得更加灵活。我们可以用接口来定义一个类的表现形式,但接口不能包含任何实现。在《thinking in java》一书中,作者对接口有这样的描述:“接口(interface)比抽象(abstract)的概念更进了一步。你可以把一个接口看成是一个纯的抽象类。”我认为作者对接口的这一解释再准确不过了。

  理解并用好接口机制将帮助我们更好的掌握java这种面向对象的编程语言。下面我们来讨论一下接口的使用规则以及相关的应用。

  一、接口的定义及实现

   定义接口和定义类相似,只是要把 class关键字换为 interface。定义方法时只需要方法名,返回类型和参数列表,不能有方法体。接口中可以定义字段,这些字段都被暗指为 static 和 final,因此应该根据需要先定好这些字段的值。例如:

public interface flyable {
void fly();
}

public interface talkable {
void talk();
}

public interface message {
int max_size = 4096;
string getmessage();
}

  上面定义的几个接口中,flyable 和 talkable 只定义了一个方法,而 message 里除了方法外还有一个字段 max_size。可以看出这些接口只定义了类的表现形式,而不包含任何实现,所以不能直接使用。要使用这些接口就需要有相应的类去实现它们。实现接口时应该先在类名后用 implements 关键字申明将要实现的接口,如果要实现多个接口,应该用逗号将它们隔开,然后一一实现这些接口中定义的方法。如下面的例子:

public class parrot implements flyable, talkable {

public void fly() {
system.out.println("flying like a parrot…");
}

public void talk() {
system.out.println("hello! i am a parrot!");
}
}

public class textmessage implements message {
string message;

public void setmessage(string msg) {
message = msg;
if (message.length() > max_size)
message = message.substring(0, max_size);
}

public string getmessage() {
return message;
}
}

  在 parrot(鹦鹉)例子中,我们用接口 flyable 来表示飞行能力,talkable 表示说话能力,但它们并不包含具体实现。而 parrot 同时具有这两种能力,所以我们为 parrot 类同时实现了 flyable 和 talkable 这两个接口。同样我们还可以定义一个swallow(燕子)类,但燕子只有飞行能力,所以我们只需要为 swallow 实现 flyable 就行了。因为它们各自的的飞行方法有所不同,所以它们有各自关于飞行的具体实现。

   另外,正因为一个类可以同时实现多个接口,使得java的面向对象特性变得非常灵活。运用这种特性,我们可以实现类似c++语言中多继承那样的特性,甚至更灵活的一些特性。下面我们来讨论一下接口在实际中的应用。

  二、用接口来定义一些全局变量

   因为接口内的字段都是static和final的,所以我们可以很方便的利用这一点来创建一些常量。例如:

public interface constants {
string root = "/root";
int max_count = 200;
int min_count = 100;
}

  在使用时可以直接用constants.root这样的形式来引用其中的常量。我们还可以用下面这种方法来创建初始值不确定的常量。

public interface randomcolor {
int red = math.random() * 255;
int green = math.random() * 255;
int blue = math.random() * 255;
}

  其中red、green和blue的值会在第一次被访问时建立,然后保持不变。
三、用接口来定义基本数据结构

   在设计一套软件系统的初期,我们可以用接口来对一些基本数据元素的特性来进行一些描述,再根据需要进行不同的实现。请大家看看下面这个例子:

public interface user {
int getage();
string getname();
string getpassword();
}

public class xmluser implements user {
// 这里用xml技术实现user接口中的方法
public int getage() { ... }
public string getname() { ... }
public string getpassword() { ... }
}

public abstract class userfactory {
public static userfactory getuserfactory() {
return new xmluserfactory();
}

public user getuser(string name);
public user getadmin();
public user createuser(string name, string password, int age);
public void adduser(user user);
public void deluser(user user);
}

public class xmluserfactory extends userfactory {
// 这里用xml技术实现的userfactory的抽象方法
}

  在这个例子中,我们定义了一个接口user和一个抽象类userfactory。然后我们用xml技术实现这两个类。可以看出,我们只需要从用userfactory的getuserfactory()就可以得到一个userfactory的实例,而不用去考虑这个实例的具体实现方法。通过userfactory的这个实例我们还可以直接得到user的实例,也不用去考具体的实现方法。

  如果我们决定用jdbc技术来实现user和userfactory,我们只需要按上面的形式实现jdbcuser和jdbcuserfactory就行了。然后把userfactory中的getuserfactory方法修改一下就可以改变了它们的实现方法。而我们已经写好的调用userfactory和user的部分不需要做任何修改。

  这是用接口来定义数据结构的一个简单的例子,在实际应用中还有很多灵活的使用方法,大家需要在学习过程中不断的去体会。

  四、理解分布式应用的原理

  目前有很多软件项目都使用了分布式的技术。java 有多种支持分布式应用的技术,早期用的比较多的有 rmi、corba 等技术,而现在 ejb 技术更为流行一些。但这些技术不管怎么发展,其实都是以接口为基础的。

  以远程方法调用 rmi(remote method invocation)为例。在编写 rmi 应用时,我们需要做两件最基本的事,首先要定义一个接口,这个接口要继承 java.rmi.remote 接口,这个接口中应该包含你要从远端调用的方法名。接下来就是写一个类来实现这个接口中的方法。例如:

public interface product extends java.rmi.remote {
string getname() throws java.rmi.remoteexception;
}

public class productimpl implements product {
string name;

public productimpl(string n) {
name = n;
}

public string getname() throws java.rmi.remoteexception {
return name;
}
}

  在这个例子中,接口 product 是放在客户端的,而 productimpl 是放在服务器端的,客户在使用时只需要用指定的规则得到product 的实例就行了,不用去考虑 product 接口里的方法是如何实现的。在定义好这两个类后,用java开发包命令“rmic productimpl”就可以帮助我们自动生成两个类 productimpl_skel 和 productimpl_stub。这两个类就包含了rmi调用的运作机制。有兴趣的朋友可以把这两个类反编译后研究一下。你会发现其中 productimpl_stub 实际上是接口 product 的一个实现类。rmi 机制就是用这个类来生成 product 的实例供客户端使用。另一个类 productimpl_skel 则是在服务端响应 productimpl_stub 的调用请求的类。而 rmi 最底层的通讯原理则是利用 objectinputstream 和 objetoutputstream 通过 socket 将要调用的方法名及参数列表传到服务器端,服务器端再通过特定的方法调用实现类(在本例中是 productimpl)的对应方法,然后将结果通过 socket 传回客户端就行了。由于 skel 和 stub 类是用工具生成的,所以就大大节省了开发的时间。另外,如果我们需要修改一些实现方法或错误,只需要对服务器端的实现类进行修改就可以了,也就是说这种分布式应用的大部分维护工作在服务器端就可以完成。

   现在越来越多的应用使用了 ejb 这种技术。ejb 是从 rmi 发展而来的一项技术,它比rmi定义得更加完善,可以获得更好的面向对象的特性。但它的规则要比rmi复杂一些。但是不管它多复杂,它同样是使用了接口来定义各种不同的 bean,也同样需要编写相应的实现类来完成具体的功能,最后还要通过 socket 来进行通讯。ejb的运作机制本身有一定的复杂性,所以其应用的效率理所当然就会受到一定的影响。因此在选择开发技术时应该根据应用的规模和特点仔细考虑,不一定流行的技术就一定能适应你的应用。如果你很好的掌握了面向对象的设计原则,你就可以自行设计。也许你可以根据自己应用的特点设计出更合适的分布式应用结构。

  五、结论

  除了上述的一些应用外,还有很多地方可以使用接口,比如在java的事件机制中就常用到接口。另外,对于一些已经开发好的系统,在结构上进行较大的调整已经不太现实,这时可以通过定义一些接口并追加相应的实现来完成功能结构的扩展。

  总之,学好接口可以帮助我们更好的理解和运用面向对象的设计原则。使我们能设计出更好的软件系统。由于本人水平的限制,如有错误之处还请多多指正。

文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·学习java需要知道的一些问题-JSP教程,Java技巧及代码
·vs.net中web services入门-.NET教程,Web Service开发
·C#中Base64之编码,解码方法-.NET教程,C#语言
·关于程序加载错误的处理-ASP教程,ASP应用
·.Net应用程序发布问题的最新解决方案,感觉比较爽(可桌面、程序中加自己的ICO及卸载等)-.NET教程,评论及其它
·设计模式-简单工厂模式(SimpleFactory-C#)-.NET教程,C#语言
·用photoshop制作logo-网页设计,Photoshop
·用jsp实现直接下载文件而不是在浏览器中打开的功能-JSP教程,Jsp/Servlet
·利用数据集实现对数据库的操作-.NET教程,数据库应用
·JAVA与数据库连接方法(二)-JSP教程,数据库相关
最新文章
·当windows vista系统提示“内存不足”怎么办?_windows vista
·王通:个人如何利用网络赚钱(1)_网赚技巧
·关于flash中注册点与中心点的区别_flash教程
·个人网站发展初期如何节省资金_站长心得
·如何写好“帮助中心”的内容_站长心得
·中国个人网站——新经济中的非主流2_站长心得
·backpack - 体验可读写的web服务_站长心得
·中文搜索引擎的研究_站长心得
·域名选取十技巧_站长心得
·用javascript 转换外部链接样式_javascript教程
相关主题
  • 漫谈Java数据库存取技术-JSP教程,Java技巧及代码
  • 漫谈Java数据库存取技术-JSP教程,Java技巧及代码
  • 漫谈Java中的中文问题-JSP教程,Java技巧及代码
  • 漫谈Java中的中文问题-JSP教程,Java技巧及代码
  • 漫谈Java程序设计中的接口应用-JSP教程,Java技巧及代码
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭