Scala

Scala开发教程(33): 组合和继承–重载成员函数和方法

jerry Scala
和Java稍有不同的一点是,Scala中成员函数和成员变量地位几乎相同,而且也处在同一个命名空间,也就是Scala中不允许定义同名的成员函数和成员变量,但带来的一个好处是,可以使用成员变量来重载一个不带参数的成员函

Scala开发教程(34): 组合和继承–定义参数化成员变量

jerry Scala
我们回到前面定义的类ArrayElement,它有一个参数conts,其唯一的目的是用来复制到contents成员变量。而参数名称conts是为了让它看起来和成员变量contents类似,而有不至于和成员变量名冲突。 Scala支持使用参数化成

Scala开发教程(35): 组合和继承–调用基类构造函数

jerry Scala
Scala开发教程(35): 组合和继承–调用基类构造函数
前面我们定义了两个类,一个为抽象类Element ,另外一个为派生的实类ArrayElement. 或许你打算再构造一个新类,这个类使用单个字符串来构造布局元素,使用面向对象的编程方法使得构造这种新类非常容易。比如下面的Li

Scala开发教程(36): 组合和继承–使用override修饰符

jerry Scala
在前面的例子LineElement使用了override来修饰width和height成员变量,在Scala中需要使用override来重载父类的一个非抽象成员,实现抽象成员无需使用override,如果子类没有重载父类中的成员,不可以使用override修

Scala开发教程(37): 组合和继承–多态和动态绑定

jerry Scala
Scala开发教程(37): 组合和继承–多态和动态绑定
在前面的例子我们看到类型为Element的变量可以保存ArrayElement类型的对象,这种现象称为“多态”。也就是基类类型的变量可以保存其子类类型的对象,到目前为止我们定义了两个Element的子类,ArrayElement和LineElem

Scala开发教程(38): 组合和继承–定义final成员

jerry Scala
在定义类的继承关系时,有时你不希望基类的某些成员被子类重载,和Java类似,在Scala中也是使用final来修饰类的成员。比如在前面的ArrayElement例子,在demo方法前加上final修饰符, class ArrayElement extends E

Scala开发教程(39): 组合和继承–使用组合还是继承

jerry Scala
Scala开发教程(39): 组合和继承–使用组合还是继承
前面我们说过,构建新类的两个基本方法是组合和继承,如果你的主要目的是代码重用,那么最好使用组合的方法构造新类,使用继承的方法构造新类造成的可能问题是,无意的修改基类可能会破坏子类的实现。 关于继承关系

Scala开发教程(40): 组合和继承–实现类Element的above,beside和toString()方法

jerry Scala
我们接着实现类Element的其它方法,如above, beside和toString方法。 above方法,意味着把一个布局元素放在另外一个布局元素的上方,也就是把这两个元素的contents的内容连接起来。我们首先实现above函数的第一个版

Scala开发教程(41): 组合和继承–定义factory对象

jerry Scala
到目前为止,我们定义了关于布局元素类的一个层次结构。你可以把包含这个层次关系的类作为API接口提供给其它应用,但有时你可以希望对函数库的用户隐藏这种层次关系,这通常可以使用factory(构造工厂)对象来实现。

Scala开发教程(42): 组合和继承–定义heighten和widen函数

jerry Scala
我们还需要最后一个改进,之前的Element实现不够完善,只支持同样高度和同样宽度的Element使用above和beside函数,比如下面的代码将无法正常工作,因为组合元素的第二行比第一行要长: new ArrayElement(Array("he