您的位置:首页 > 编程语言 > Java开发

Java咖啡馆(8)——大话面向对象(下)-Java基础-Java-编程开发

2008-05-20 04:54 579 查看
google_ad_client = "pub-8800625213955058";

/* 336x280, 创建于 07-11-21 */

google_ad_slot = "0989131976";

google_ad_width = 336;

google_ad_height = 280;

//

  构思这篇咖啡馆的时候时值奥运圣火熊熊燃烧,看到中国奥运代表团努力为国争光,不由不决定把这次的主题献给我们的奥运健儿!

面向对象编程

  如果你是Java咖啡馆的常客,那么在不知不觉中你早已接触并运用过Java的面向对象知识。在这回的咖啡馆中,让我们详细剖析一个面向对象编程的实例,把知识巩固下来。

  奥运是国际性的运动盛会,中国运动员自然要用英文形式的名字才便于同国际接轨。这回要编写的程序便是用来解析英文名字的工具。通常,Gary Chan这样的英文名字形式表示名在前、姓在后。而Yao, Ming这样的形式则表示姓在前名在后。大家千万不要以为Gary在这里平白无故用Yao, Ming打广告,Yao初中时候可是跟Gary一个班的,他被语文老师仰着头臭骂痛哭后,经常是Gary安慰他,并经常一同骑车回家。看着今日的Yao已经是世界级的运动员为国争光了,Gary更需要加倍努力了……

  OK,言归正传,我们的程序将自动判断名字形式,并且分解出姓和名。还是老规矩,请用Eclipse生成一个名为Chap 07 NameParser的项目,并且加入一个新的名为NameParser类,在Package属性填写com.cfan.garychan.nameparser。如果你忘记了package的知识,请参考《Java咖啡馆(6)—编写猜数字游戏 》中关于包概念的描述。

  回顾一下,类是定义了从类生成的实例(instance)中的数据和方法的关系的模板。有人喜欢把类比作图章,图章敲出来的图案便是对象,的确很形象。

  Java中用class关键字来定义类,不过我们用Eclipse来定义更加方便。仍然用Eclipse新建一个叫做Namer的类,记得不要在public static void main(String[] args)前面打勾,确定后Eclipse便生成一个新的Java源文件Namer.java,里面的代码如下:

public class Namer {

}

  这个类非常简单,可惜不能做任何事情。

  1.封装

  面向对象程序设计中,一个非常重要的技术便是封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。这样做的好处在于可以使类内部的具体实现透明化,只要其他代码不依赖类内部的私房数据,你便可以安心修改这些代码。此外,这样做也是出于安全方面的考虑,如果代表网上支付卡密码的变量随便就可以被访问到,这样的系统谁还敢用呢?

  封装主要依靠对类、数据和方法的访问控制,从语法上讲就是加上private、protected、public等关键词,如果没有关键词修饰则默认为package。它们控制权限如下表所示:
Specifier 类 子类 包 世界
private X
protected X X* X
public X X X X
package X X


  注意上面的X*,父类的protected部分,只有在与父类在同一个包内的子类才能够访问,否则也是不可访问的。

  让我们结合实例理解一下。稍微把Namer类改一下:

public class Namer {
protected String surname; // 姓
protected String firstname; // 名

public String getFirstname() {
return firstname;
}
public String getSurname() {
return surname;
}
}

  这个类有两个String类型的成员变量,surname和firstname,分别用来储存姓和名。这两个成员变量前都有protected修饰词,按照表格,这两个变量仅能够被类本身、子类以及包中其他类操作,而包外的类则无权访问。不过,为了跟包外的代码进行沟通,Namer类提供了getFirstname和getSurname这两个public的方法。从而,对包外的类而言,姓名数据是只读的。

[1]

[2]

[3]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: