newasp home
用户管理  |  用户注册
首 页 ┆ 文章中心 ┆ 下载中心 ┆ 图片中心 ┆ 博客中心 ┆ 社区论坛 ┆ 客户留言
  • 站点首页
  • 电脑网络技术
  • 图形图像技术
  • 网络应用
  • 多媒体技术
  • 电脑入门初步
  • 网络推广技术
  • 数据库设计
  • Linux技术
  • 网络动态
用户名: 密码:
当前位置:PC我爱社区 → 文章中心 → 数据库设计 → 文章内容

Java面向对象程序设计之接口应用

减小字体 增大字体 作者:网络  来源:转载  发布时间:2008-7-4 12:02:06

COOCO视频会议实现沟通创造价值!  网站建设--像素科技全面推出,各种语言任你选择
文红论文网提供各类论文发表和翻译 影视制作、广告摄影、3D制作、企业形象策划

Java语言提供了一种接口(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 Const 
ants {
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的实例,也不用去考具体的实现方法。

[1] [2]  下一页

[] [返回上一页] [打 印]
  • ·上一篇文章:了解JAVA classloader
  • ·下一篇文章:使用JAVA建立稳定的多线程服务器

文章评论评论内容只代表网友观点,与本站立场无关!

用户名: ! 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容: !

         (注“!”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码

频道栏目导航

  • 电脑网络技术
  • 图形图像技术
  • 网络应用
  • 多媒体技术
  • 电脑入门初步
  • 网络推广技术
  • 数据库设计
  • Linux技术
  • 网络动态
  • 更多分类

本类热门阅览

  • · Windows下如何用vc直接编译连接DDK...
  • · 如何为Vista/Win2008中的IIS7添加P...
  • · sql 2000与sql 2005相互转移的问题...
  • · 如何建立SQL Server 2005数据库邮件...
  • · C# 怎样实现远程连接SQL Server200...
  • · VS 2008和老的VS 2005附件包的兼容...
  • · 黑客编程:Delphi写QQ聊天记录器演示...
  • · SQL Server2005数据库连接中常见问...
  • · Sql server 2005密码安全追踪与存储...
  • · SQL 2005 XML最佳实施策略用法
  • · SQL Server2005高可用性方面的不足...
  • · 在SQL Server 2005中解决死锁问题

相关文章

  • ·Java面向对象程序设计之接口应用
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 管理登陆
网站备案号:沪ICP备06047794号
本站的各类网络聊天工具,系统工具,媒体工具,绿色软件如有侵犯你的版权,请指出,本站将立即改正。
建议您使用1024*768分辨率浏览下载本站的免费软件(绿色软件)资源
软件站版权所有:PC我爱社区 站长:子昀 点击这里和我联系