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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Scala开发教程(32): 组合和继承–扩展类

jerry Scala
Scala开发教程(32): 组合和继承–扩展类
我们需要能够创建新的布局元素对象,前面定义的Element为抽象类,不能直接用来创建该类的对象,因此我们需要创建Element的子类。这些子类需要实现Element类定义的抽象函数。 Scala中派生子类的方法和Java一样,也是

Scala开发教程(31): 组合和继承–定义无参数方法

jerry Scala
作为下一步,我们将向Element添加显示宽度和高度的方法,height方法返回contents里的行数。width方法返回第一行的长度,或如果元素没有行记录,返回零。 abstract class Element { def contents: Array[String