JAVA程序员必读:基础篇(1.b)面向对象编程概念

 2.4实例和类成员
  2.4.4 初始化实例成员
  然而,所有的实例变量(原点和大小)都必须初始化。在这个例子中,类经常有一个构造函数来完成所有的初始化。其它的构造函数调用这个构造函数并且提供给它参数或者缺省数值。比如下面是以上所说的三个构造函数,它们初始化如下:
  Rectangle() {
  this(0,0,0,0);
  }
  Rectangle(int width, int height) {
  this(0,0,width,height);
  }
  Rectangle(int x, int y, int width, int height) {
  this.x = x;
  this.y = y;
  this.width = width;
  this.height = height;
  }
  JAVA语言支持实例初始化块,你可以放心使用它。这里建议使用构造函数来初始化,主要有以下三个原因:
  所有的初始化代码处在一个地方,这样使得代码更容易维护和阅读。
  缺省值可以清除地知道。
  构造函数广泛被JAVA程序设计人员所熟悉,包括相对新的JAVA程序设计人员,而实例初始化程序不能,而且他可能导致其它JAVA程序设计员的困惑。
  2.4实例和类成员
  2.4.5 对象和类
  你可能会注意到对象和类看起来很相似。在现实世界中,类和对象之间的区别经常是让程序员困惑的源泉。在现实世界中,很明显,类不能是它们描述的对象本身。然而,在软件中很困难来区分类和对象。有部分原因是软件对象只是现实世界中的电子模型或者是抽象概念。但是也因为对象通常有时是指类和实例。
  2.5什么是继承
  一个类可以从它的父类继承状态和行为。继承为组织和构造软件程序提供了一个强大的和自然的机理。
  总得说来,对象是以类得形式来定义得。你可能现在已经可以从它类知道许多对象了。即使你如知道,如果我告诉你它是一辆自行车,你就会知道它有两个轮子和脚踏板等等。面向对象系统就更深入一些了,它允许类在其它类中定义。比如,山地自行车、赛车以及串座双人自行车都是各种各样的自行车。在面向对象技术中,山地自行车、赛车以及串座双人自行车都是自行车类的子类。同样地,自行车类是山地自行车、赛车以及串座双人自行车的父类。这个父子关系可以如图9所示:
   
  每一个子例从父类中继承了状态。山地自行车、赛车以及串座双人自行车共享了这些状态:速度等。同样,每一个子类继承类从父类的方法,山地自行车、赛车以及串座双人自行车共享了这些行为:刹车、改变脚踏速度等等。
  2.5什么是继承
  然而,子类不能受到父类提供的状态和行为的限制。子类可以增加变量和方法到从父类继承而来的变量和方法。比如,串座双人自行车有两个座位,这是它的父类没有的。
  子类同样可以重载继承的方法并且为这些方法提供特殊执行方法。比如 ,如果你有一个山地自行车有额外 的齿轮设置,你就可以重载改变齿轮方法来使骑车者可以使用这些新的齿轮。
  你也不能受限于继承的一个层次。继承树或者类的分级结构可以是很深。方法和变量是逐级继承的。总的来说,在分级结构的越下方,就有越多的行为。
  如果对象类处于分级结构的顶端,那么每个类都是它的后代(直接地或者是间接地)。一种类型的对象保留任何对象的一个引用,比如类或者数组的一个实例。对象提供了行为,这些行为是运行在JAVA虚拟机所需要的。比如,所有类继承了对象的toString方法,它返回了代表对象的字符串。
  下面说说我们为什么要使用继承,它到底有哪些好处呢?好处是有的:
  子类提供了特殊的行为,这是在父类中所没有的。通过使用继承,程序员可以多次重新使用在父类中的代码。
  程序员可以执行父类(称为抽象类)来定义总的行为。这个抽象的父类可以定义并且部分执行行为,但是绝大多数的父类是未定义和未执行的。其它的部分由程序员来实现特殊的子类。
  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文件:
   
   
   
   
   
  然后装载网页到浏览器或者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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值