黑猴子的家(Scala|黑猴子的家:Scala 重写字段)

子类改写父类或者抽象父类的字段,通过以下方式

class Person1(val name:String,var age:Int){ println("主构造器已经被调用") val school="五道口职业技术学院" def sleep="8 hours" override def toString="我的学校是:" + school + "我的名字和年龄是:" + name + "," + age }class Person2(name:String, age:Int) extends Person1(name, age){ override val school: String = "清华大学" }

尖叫提示:
(1)def只能重写另一个def
(2)val只能重写另一个val或不带参数的def (只是告诉你行,尽量别这么做,没有什么意义)
(3)var只能重写另一个抽象的var
(4)使用override 关键,是非常规范的,如果去掉,在语法上是没有错,但是你乍看,你不知道是自己的,还是重写的
什么是抽象 var?
abstract class Person3 { var name:String }

重写字段
class Fathera { def a = 10 val b = 10 } //Ctrl + o class Dog extends Fathera{ //override def a = 10 override val a = 10 override val b = 20 }

【黑猴子的家(Scala|黑猴子的家:Scala 重写字段)】尖叫提示:val是可以重写没有参数的函数,等号右边直接写方法体就行,函数也是一个对象,是对象就能赋值给一个变量,这样理解就可以了,这也就是为什么 val f1 = () => 1+2 是可以的,那这是一个方法还是一个变量呢?你看f1的字体 变紫+斜体,它就是一个变量,一个值,到这个阶段了,我可以告诉你世界的真相了,方法名其实本身就是一个变量,你可以这样理解的,总之是很灵活的,面向函数式编程

    推荐阅读