📅  最后修改于: 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字段。
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。特质也可以定义字段并被多个类混入。