2.继承 对象是用类来定义的。通过类,你能够充分了解对象的全貌。比如,一说起自行车,你就会联想到自行车是有两个轮子、车把以及脚踏板。 更进一步,面向对象语言的另一个特点便是允许从一个已有的类定义新的类。比如,山地车、公路赛车和两人三轮车都是自行车。在面向对象语言中,你可以从一个已经有的自行车类定义山地车类、公路赛车类等等。山地车类、公路赛车类都称为自行车类的子类,自行车类是它们的父类,而这种定义关系,便是继承关系。 子类继承了父类的属性。比如,山地车、公路赛车都是有两个轮子一个车座。子类也可继承了父类的方法,比如山地车、公路赛车、两人三轮车都可以前进、刹车、转弯等。 让我们看看如何运用继承来处理名在姓之前的模式。这种模式中,由于姓和名是用空格分割的,所以程序如下: class FirstFirst extends Namer { FirstFirst类通过extends关键词表示对Namer类进行继承,只有一个类方法,名字恰好是FirstFirst。这并不是一个巧合。 所有的Java类都拥有若干特殊方法用来初始化对象,它们称为构造函数,特征就是与类同名,可以带有或者没有参数。这种同名函数不同参数的现象,在面向对象中称作重载(Overload)。拿以前使用new操作符生成随机数的代码来说: Random random = new Random(); new操作符实例化一个Random对象后,紧接着就调用了Random类的构造函数进行初始化,只不过这个构造函数没有参数。没有参数的构造函数,称为默认构造函数。默认的构造函数是每个类都拥有的,即使没有声明在代码中,Java编译器在编译时也会自动加入。 回过头来看FirstFirst类。FirstFirst类继承自Namer类,从而也拥有自己的firstname和surname属性。在FirstFirst类的构造函数中,通过解析参数s,通过搜索空格的方法来解析出空格前面的名和空格后面的姓,从而执行 FirstFirst parser = new FirstFirst("Gary Chan"); 之后,我的姓和名已经解析出来并且分别保存在firstname和surname变量中了。同时,FirstFirst类继承了Namer的方法,从而便可以通过如下语句来返回姓——Gary了: String mySername = parser.getSurname(); 注意,我们并没有在FirstFirst类中定义getSurname()方法,这是从父类继承来的,这就是代码重用的概念,避免了无谓的重复劳动。 有了上面的基础,再来编写名在姓之后的模式: class FirstLast extends Namer { 由此可见,Namer类的两个子类拥有它全部的属性和方法,并且在其之上更加入了解析姓名的能力,而代码却增加不多。代码重用,这是面向对象的主要魅力之一!
|
闁衡偓閹増顥戦柟瀛樺姇婵拷闁哄被鍎冲﹢鍛村绩閹増顥�>>
正在阅读:Java咖啡馆(8)——大话面向对象(下)Java咖啡馆(8)——大话面向对象(下)
2005-03-25 12:08
出处:
责任编辑:xietaoming
键盘也能翻页,试试“← →”键