JAVA程序员必读:基础篇(8)

程序|程序员

JAVA程序员必读:基础篇
时间:2001/09/13 13:31 作者:ZSC 太平洋网络学院

 

2.6什么是接口

  接口是一个收集方法和常数表单的契约。当类执行一个接口,它就许诺声明在那个接口中执行所有的方法。

  接口是一个设备或者一个系统,它是用于交互的无关的实体。根据这个定义,远程控制是一个在你和电视的接口;而英语是两个人之间的接口;强制在军事中的行为协议是不同等价人之间的接口。在JAVA语言中,接口是一个设备,它是用来与其它对象交互的设备。一个接口可能对一个协议是类似的。实际上,其它面向对象语言有接口的功能,但它们调用它们的接口协议。

  自行车类和它的类分级结构定义了什么是自行车。但是自行车在其它方面与现实世界交互作用,例如,仓库中的自行车可以由一个存货程序来管理。一个存货程序不关心管理项目的哪一类只要项目提供某一信息,比如价格和跟踪数字。取代强迫类与其它无关项的关系,存货程序建立了通讯的协议。这个协议是由包含在接口中的常数和方法定义组成的。这个存货清单接口将要定义(但不执行)方法来设置和得到零售价格,指定跟踪数字等等。

  为了在存货清单程序中操作,自行车类必须在执行接口的时候遵守这个协议。当一个了执行一个接口的时候,类遵守定义在接口中的所有方法。因此,自行车将为这些设置和获得零售价格并指定跟踪数值等等的方法提供执行。

你可以使用接口来定义一个行为的协议,这个行为可以有在类分级结构中任何类来执行。接口的主要好处有一下几点:

不用人工强迫类关系在无关类中截获相似处。

声明想执行的一个或者更多类的方法。

在不暴露对象的类的前提下,暴露对象的编程接口。
2.7怎样将这些面向对象的概念转换为代码

  这一小节将给你展现创建对象、执行类、发送消息、创建一个父类以及执行一个接口的代码。

  以下是一个applet(applet是用JAVA编程语言编写的程序,它可以运行在兼容JAVA平台的网络浏览器,比如HotJava或者Netscape Navigator)的程序,名为ClickMe。如图10所示,当你点击方框内任何地方,一个红点就会出现。

(图10)

提示:上面的applet需要JDK1.1。如果你使用老的不支持JDK1.1的浏览器,你将不能运行这个applet。相反,你需要在一个1.1浏览器上来看这个网页,比如在HotJava、JDK Applect浏览器(appletviewer)或者某个版本的Netscape Navigator和Internet Explorer。

下面具体解释一下这个Applet。

ClickMe Applet是一个相对简单的程序因此它的代码就短了多了。但是,如果你还没有太多的编程经验,你可以发现这些代码也不是那么容易的。我们不要求你马上理解程序中的每个问题,并且这节教程也不是讲了十分详细的。这里的目的示暴露一些源代码给你并且跟你刚才所学道的概念和技术联系上。你将在以后的教程中学到更详细的内容。

2.7怎样将这些面向对象的概念转换为代码

2.7.1ClickMe的源代码和Applet标签

为了编译这个applet你需要两个源文件:ClickMe.java和Spot.java。为了运行这个applet你需要利用这个applet标签来创建一个html文件:

<applet code="ClickMe.class"

width="300" height="150">

</applet>

其中ClickMe.java的源代码为:

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

public class ClickMe extends Applet implements MouseListener {

private Spot spot = null;

private static final int RADIUS = 7;

public void init() {

addMouseListener(this);

}

public void paint(Graphics g) {

//画一个黑边框和白背景

g.setColor(Color.white);

g.fillRect(0, 0, getSize().width - 1, getSize().height - 1);

g.setColor(Color.black);

g.drawRect(0, 0, getSize().width - 1, getSize().height - 1);

//画红点

g.setColor(Color.red);

if (spot != null) {

g.fillOval(spot.x - RADIUS, spot.y - RADIUS, RADIUS * 2, RADIUS * 2);

}

}

public void mousePressed(MouseEvent event) {

if (spot == null) {

spot = new Spot(RADIUS);

}

spot.x = event.getX();

spot.y = event.getY();

repaint();

}

public void mouseClicked(MouseEvent event) {}

public void mouseReleased(MouseEvent event) {}

public void mouseEntered(MouseEvent event) {}

public void mouseExited(MouseEvent event) {}

}

而Spot.java的源代码为:

public class Spot {

public int size;

public int x, y;

public Spot(int intSize) {

size = intSize;

x = -1;

y = -1;

}

}

然后装载网页到浏览器或者appletviewer工具。并且确保所有必要的文件都在相同的目录中。 如图11所示:


(图11)
2.7.2 ClickMe Applet中的对象

在这个applet中有许多对象。两个最明显的是:applet本身和红点。

浏览器在包含applet的HTML代码中碰到applet标签的时候就创建了applet对象。这个applet标签从创建applet对象的地方提供类的名字。在本例子中,这个类的名字为ClickMe。

ClickME.applet将创建一个对象来在屏幕上画出点。每次你在applet中点击鼠标的时候,applet就将通过改变对象的x和y坐标来移动红点。这个点不是自己画出来的,它是applet画出的,它是根据包含在点对象中的信息画出的。

除了前面两个明显的对象,另外还有一些看不见的对象呢。有代表三种颜色(黑、白、红)的三个对象以及代表点击鼠标的用户动作的事件对象等等。
2.7.3ClickMe Applet中的类

因为代表在屏幕上点的对象是很简单,接下来让我们看看这个名为spot的类吧。它声明了三个实例变量:包括点半径的size,包含点当前水平位置的x坐标以及包含点当前垂直位置的y坐标:

public class Spot {

//实例变量

public int size;

public int x, y;

//构造函数

public Spot(int intSize) {

size = intSize;

x = -1;

y = -1;

}

}

另外,类有一个构造函数,它用来初始化由类创建的新对象。构造函数跟类有相同的名字。这个构造函数初始化所有三个对象的变量。Size的初始化数值是在调用的时候座位参数提供的。x和y变量都被设置为-1,这里-1的目的是为了让点在开始的时候处于屏幕的外面,即产生假不可视的效果。

这个applet是在applet初始化的时候创建了一个新的点对象。下面是applet类的相关代码:

private Spot spot = null;

private static final int RADIUS = 7;

...

spot = new Spot(RADIUS);

第一行声明了一个名为spot的变量,它是Spot数据类型,并且初始化这个变量为NULL。第二行声明了一个整型变量,名为RADIUS,它的值为7。最后一行是创建一个对象。New关键字为对象分配了内存空间。Spot(RADIUS)调用了上面已经描述了的构造函数并且传递RADIUS数值,这样点对象的size就被设置为7。如图12所示的左图代表了Spot类,而右边的是代表了spot对象。

(图12)
2.7.4ClickMe Applet中的消息

就如所知道的,对象A可以使用消息来请求对象B做一些事情,一个消息有三个组成部分:

消息被寻址的对象

要执行执行方法的名字

方法需要的任何参数

在ClickMe applet种有以下两行这样的代码:

g.setColor(Color.white);

g.fillRect(0, 0, getSize().width - 1, getSize().height - 1);

这两个消息都是从applet到名为g的对象。其中g是一个图形对象,它知道怎样在屏幕上简单画一些形状或者文本。这个对象在浏览器指示applet来画的时候提供了applet。上面代码的第一行设置颜色为白色,第二行是填充一个指定大小的矩形区域,它的颜色为白色。如图13所示,是一个消息的三个组成部分:

(图13)
2.7.5 ClickMe Applet中的继承

为了在浏览器种运行,对象必须是一个applet。这就意味着对象必须是类的一个实例,这个类是从由JAVA平台提供的Applet类派生而来的。

ClickMe applet对象是一个ClickMe类的一个实例,它是这样声明的:

public class ClickMe extends Applet implements MouseListener {

...

}

上面的语句就产生了Applet的一个子类。ClickMe继承了父类的许多功能,包括初始化、由浏览器来开始和结束、在浏览器区域画图以及对接收到的鼠标事件注册。除了有了这些功能,ClickMe类还要实现以下的功能:它的画图代码在paint的方法中,初始化代码必须在init方法中等等。

public void init() {

... // 这里加入ClickMe的初始化代码

}

public void paint(Graphics g) {

... // 这里加入ClickMe的画图代码

}

2.7.6 ClickMe Applet中的接口

ClickMe applet是通过在鼠标点击出显示一个红点来响应鼠标的点击事件。如果对象想通知鼠标点击,JAVA平台事件系统需要对象执行MouseListener接口。这个对象必须同时作为鼠标监听器来注册。

这个MouseListener接口声明了五种不同的志芋工,每种方法是用在鼠标被点击的时候对不同鼠标事件的调用。当鼠标被点击的时候,或者当鼠标移动到applet外面的时候等等。

下面是ClickMe applet完整的代码。其中mousePressed是处理鼠标事件的:

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

public class ClickMe extends Applet implements MouseListener {

private Spot spot = null;

private static final int RADIUS = 7;

public void init() {

addMouseListener(this);

}

public void paint(Graphics g) {

// 画一个黑色边框和一个白色背景

g.setColor(Color.white);

g.fillRect(0, 0, getSize().width - 1, getSize().height - 1);

g.setColor(Color.black);

g.drawRect(0, 0, getSize().width - 1, getSize().height - 1);

//画一个点

g.setColor(Color.red);

if (spot != null) {

g.fillOval(spot.x - RADIUS,

spot.y - RADIUS,

RADIUS * 2, RADIUS * 2);

}

}

public void mousePressed(MouseEvent event) {

if (spot == null) {

spot = new Spot(RADIUS);

}

spot.x = event.getX();

spot.y = event.getY();

repaint();

}

public void mouseClicked(MouseEvent event) {}

public void mouseReleased(MouseEvent event) {}

public void mouseEntered(MouseEvent event) {}

public void mouseExited(MouseEvent event) {}

时间: 2024-10-22 22:53:53

JAVA程序员必读:基础篇(8)的相关文章

JAVA程序员必读:基础篇(9)

程序|程序员 JAVA程序员必读:基础篇时间:2001/09/13 13:31作者:ZSC 太平洋网络学院 2.8 面向对象概念的问题和练习 本节教程测试一下你对对象.类.消息等等的理解,我们是通过做一些练习以及回答一些问题来进行的. 2.8.1 问题 你可以使用API文档来回答这些问题: ClickMe applet使用Color.red来设置画图颜色为红色.其它有什么颜色可以象这样来使用? 怎样设置颜色为紫色(purple)? 2.8.2 练习 现在,利用你从API文档中学到的知识来修改Cl

JAVA程序员必读:基础篇(7)

程序|程序员 JAVA程序员必读:基础篇时间:2001/09/13 13:31作者:ZSC 太平洋网络学院 2.5什么是继承 一个类可以从它的父类继承状态和行为.继承为组织和构造软件程序提供了一个强大的和自然的机理. 总得说来,对象是以类得形式来定义得.你可能现在已经可以从它类知道许多对象了.即使你如知道,如果我告诉你它是一辆自行车,你就会知道它有两个轮子和脚踏板等等.面向对象系统就更深入一些了,它允许类在其它类中定义.比如,山地自行车.赛车以及串座双人自行车都是各种各样的自行车.在面向对象技术

JAVA程序员必读:基础篇(6)

程序|程序员 JAVA程序员必读:基础篇时间:2001/09/13 13:31作者:ZSC 太平洋网络学院 2.4.2初始化实例和类成员 下面讲讲初始化实例和类成员: 你可以在类中定义它们的时候,使用static初始化程序和实例初始化程序来为类和实例成员提供初始化数值: class BedAndBreakfast { static final int MAX_CAPACITY = 10; boolean full = false; } 这个对于原始数据类型是没有问题的.有时候,它可以用在创建数组

JAVA程序员必读:基础篇(5)

程序|程序员 JAVA程序员必读:基础篇时间:2001/09/13 13:31作者:ZSC 太平洋网络学院 2.4实例和类成员 2.4.1理解实例和类成员 下面详细讨论一下实例和类成员,具体涉及变量和方法以及类变量和方法: 你这样声明一个成员变量,比如在类Myclass中有一个float型的aFloat: class MyClass { float aFloat; } 这样你就声明一个实例变量.每次你创建一个类的实例的时候,系统就为实例创建了类的每一个实例变量的副本.你可以从对象中访问对象的实例

JAVA程序员必读:基础篇(4)

程序|程序员 JAVA程序员必读:基础篇时间:2001/09/13 13:31作者:ZSC 太平洋网络学院 2.3什么是类 类实际上是对某种类型的对象定义变量和方法的原型. 在现实世界中,你经常看到相同类型的许多对象.比如 ,你的自行车只是现实世界中许多自行车的其中一辆.使用面向对象技术,我们可以说你的自行车是自行车对象类的一个实例.通常,自行车有一些状态(当前档位.两个轮子等等)以及行为(改变档位.刹车等等).但是,每辆自行车的状态都是独立的并且跟其它自行车不同. 当厂家制造自行车的时候,厂商

JAVA程序员必读:基础篇(3)

程序|程序员 JAVA程序员必读:基础篇时间:2001/09/13 13:31作者:ZSC 太平洋网络学院 2.2什么是消息 软件对象之间进行交互作用和通讯是利用消息的. 单一的一个对象通常不是很有用的.相反,一个对象通常是一个包含了许多其它对象的更大的程序或者应用程序.通过这些对象的交互作用,程序员可以获得高阶的功能以及更为复杂的行为.你的自行车如果不使用它的时候,它就是一堆铝合金和橡胶,它没有任何的活动.而只有当有其它的对象来和它交互的时候才是有用的. 软件对象与其它对象进行交互与通讯是利用

JAVA程序员必读:基础篇(2)

程序|程序员 JAVA程序员必读:基础篇时间:2001/09/13 13:31作者:ZSC 太平洋网络学院 二.面向对象编程 如果你以前从来没有使用面向对象语言,你需要在开始编写JAVA代码之前先理解这个概念.你需要理解什么是对象.什么是类.对象和类的关系怎样以及使用消息怎样在对象之间进行通讯.本教程的前面部分将描述面向对象编程的概念,而后面的教程将教你怎样将这个概念编成代码. 2.1什么是对象 对象是一些相关的变量和方法的软件集.软件对象经常用于模仿现实世界中我们身边的一些对象.对象是理解面向

JAVA程序员必读:基础篇(1)

程序|程序员 JAVA程序员必读:基础篇 时间:2001/09/13 13:31 作者:ZSC 太平洋网络学院 JAVA是有SUN公司开发的新一代编程语言,它可以用在各种不同的机器.操作系统的网络环境中进行开发.不论你使用哪种浏览器或者使用哪种操作系统(Windows.Unix等等),只要浏览器支持JAVA,你就可以看到生动的主页.JAVA正在逐步成为Internet应用的主要开发语言,它彻底改变了应用软件的开发模式,为迅速发展的信息世界增添了新的活力.所以作为Internet应用的开发技术人员

JAVA程序员必读:基础篇(目录)

程序|程序员 JAVA是有SUN公司开发的新一代编程语言,它可以用在各种不同的机器.操作系统的网络环境中进行开发.不论你使用哪种浏览器或者使用哪种操作系统(Windows.Unix等等),只要浏览器支持JAVA,你就可以看到生动的主页.JAVA正在逐步成为Internet应用的主要开发语言,它彻底改变了应用软件的开发模式,为迅速发展的信息世界增添了新的活力.所以作为Internet应用的开发技术人员不可不看JAVA,而JAVA程序不可不先从基础学起,这正是JAVA程序员必读:基础篇的用意. 本J