黑猴子的家: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
}

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

你可能感兴趣的