📜  斯卡拉 |字段覆盖(1)

📅  最后修改于: 2023-12-03 14:55:04.040000             🧑  作者: Mango

斯卡拉 | 字段覆盖

在scala中,子类可以重写继承自父类的字段。这种行为称为字段覆盖。字段可以是val或var,它们也可以是在类、对象或特质中定义的。

基本语法

当子类重写父类中的字段时,必须使用override关键字。

class A {
  val x = 10
}

class B extends A {
  override val x = 20
}

在这个例子中,类B重写了类A的x字段。

var字段覆盖

子类可以重写继承自父类的var字段。

class A {
  var x = 10
}

class B extends A {
  override var x = 20
}

在这个例子中,类B重写了类A的x字段。

限制

在使用字段覆盖时,必须遵循一些限制。首先,val字段只能被val覆盖,var字段可以被val或var覆盖。

其次,被覆盖的字段必须在父类中声明为public。

class A {
  private val x = 10
}

class B extends A {
  override val x = 20 // 编译错误:字段 x 在 class A 中是 private 的
}
特质

特质可以定义字段,被多个类混入以实现多重继承。如果多个特质混入了同一个类,它们可以定义相同名称的字段。

trait A {
  val x = 10
}

trait B {
  val x = 20
}

class C extends A with B {
  override val x = 30
}

在这个例子中,类C继承了特质A和B,并重写了它们的x字段。

总结

在scala中,使用字段覆盖可以让子类重写父类的字段。在使用字段覆盖时,需要使用override关键字,并且被覆盖的字段必须在父类中声明为public。特质也可以定义字段并被多个类混入。