spark scala中的override关键字

Override表示重写字段或者方法

override是覆盖的意思,在很多语言中都有(或为:overwrite),在scala中,override是非常常见的,在类继承方面,它和java不一样,不是可写可不写的了,而是必须写的。在java1.5中引入了override注解,但不强制使用。

而scala如果不写而覆盖了对应的属性或者方法的话,编译器就会报错了。

在scala里,类继承有两点限制:

  • 重写方法需要使用override关键字;
  • 只有主构造函数才能往父类构造函数中传参数。

scala的副构造函数必须调用主构造函数或是另一个副构造函数。只有在主构造函数中才能向父类的构造函数中传递数据。可以看出来主构造函数如同父类和子类中间的一道关卡:它既负责完成子类的初始化,也负责与父类的沟通。

class Vehicle(val id: Int, val year: Int) {
  override def toString(): String = "ID: " + id + " Year: " + year
}

class Car(override val id: Int, override val year: Int, var fuelLevel: Int) extends Vehicle(id, year) {
  override def toString(): String = super.toString() + " Fuel Level: " + fuelLevel
}

val car = new Car(1, 2009, 100)
println (car)

首先定义了一个父类Vehicle,

然后定义一个子类,继承父类Vehicle,注意,成员变量和方法都被override覆写。

执行的结果为:

scala> class Vehicle(val id: Int, val year: Int) {
     |   override def toString(): String = "ID: " + id + " Year: " + year
     | }
defined class Vehicle

scala> class Car(override val id: Int, override val year: Int, var fuelLevel: Int) extends Vehicle(id, year) {
     |   override def toString(): String = super.toString() + " Fuel Level: " + fuelLevel
     | }
defined class Car

scala> val car = new Car(1, 2009, 100)
car: Car = ID: 1 Year: 2009 Fuel Level: 100

scala> println (car)
ID: 1 Year: 2009 Fuel Level: 100

猜你喜欢

转载自blog.csdn.net/a627082796/article/details/87872516