scala组合与继承
二维布局库
抽象类
abstract class Element {
def contents: Array[String]
}
abstract修饰符说明类或许有没实现的抽象成员,不能实例化抽象类
scala中如果方法没有实现(没有等号或方法体),它就是抽象的,不像java,方法的声明中不需要抽象修饰符
定义无参数方法
abstract class Element {
def contents: Array[String]
def height: Int = contents.length
def width: Int = if (height == 0) 0 else contents(0).length
}
这三个方法没一个有参数列表,甚至连个空列表都没有
这种无参数方法在scala里是非常普通的
带有空括号的方法定义:def height(): Int 被称为空括号方法
推荐的惯例是在没有参数并且方法仅通过读含有对象的方式访问可变状态(专指不改变可变状态时),使用无参数方法
scala可以用空括号方法重载无参数方法,反之亦可,你还可以在调用任何不带参数的方法时省略空的括号
扩展类
class ArrayElement(conts: Array[String]) extends Element {
def contents: Array[String] = conts
}
如果省略extends子句,scala编译器隐式地假设你的类扩展自scala.AnyRef
子类型化:是指子类的值可以被用在需要其超类的值的任何地方
重载方法和字段
定义参数化字段
class ArrayElement( // 请注意,小括号
val contents: Array[String]
) extends Element
注意现在contents参数前缀了val,这是在同一时间使用相同的名称定义参数和字段的一个简写方式
字段使用参数值初始化,就好像类被写成如下的方式
class ArrayElement(x123: Array[String]) extends Element {
val contents: Array[String] = x123
}
调用超类构造器
使用override修饰符
scala里重载了父类具体成员的成员都需要这样的修饰符
如果成员实现的是同名的抽象成员则这个修饰符是可选的
多态和动态绑定
定义final成员
final修饰符确保成员不被子类重载
使用组合与集成

浙公网安备 33010602011771号