Scala基础知识之继承

一、拓展 (继承)

extends是Scala中实现继承的保留字

Scala基础知识之继承
思考:单例对象是否能被继承呢?

二、 重写(Override)

Scala基础知识之继承

规则

Scala基础知识之继承

例如:

Scala基础知识之继承

三、抽象(abstract)

Scala基础知识之继承

四 、保护 (final, protected)

Scala基础知识之继承

五、 构造

子类构造器的运行在超类构造器运行之后

在超类的构造器中调用的成员被子类重写后,返回值可能不正确:

Scala基础知识之继承
构造week对象前先执行month的构造器,num被初始化为31,month为初始化days 数组,调用num,但num被子类week重写了,但因为week构造器还没被调用,此时 num的值未被初始化,因而返回0,days被设置为长度为0的数组,month构造器运行 完毕,执行week构造器,num被初始化为7

解决方法:

 将超类的val声明为final
 将超类的val声明为lazy
 在子类中使用提前定义语法

提前定义

Scala基础知识之继承