Scala抽象属性和抽象方法

        Scala不仅有抽象方法的概念,还有抽象属性的概念。
        抽象属性: 声明而没有赋初值的属性。
        抽象方法: 声明了方法而没有方法体。

        抽象类中不仅可以有抽象属性和抽象方法,也可以有非抽象属性和非抽象方法。

object Scala01_Abstract {
    
    
  def main(args: Array[String]): Unit = {
    
    
    val stu = new Student01
    println(stu.name)
    println(stu.age)
    stu.sleep()
    stu.eat()
  }
}

// 抽象类中既可以有抽象属性和抽象方法,也可以有非抽象属性和非抽象方法
abstract class Person01 {
    
    
  // 抽象属性,声明却不赋值
  var name: String

  // 抽象方法,声明却没有方法体
  def eat(): Unit

  // 非抽象属性
  val age: Int = 18

  // 非抽象方法
  def sleep() {
    
    
    println("Person sleep")
  }
}

// 子类继承抽象类
class Student01 extends Person01 {
    
    
  // 重写抽象属性和抽象方法,可以不加override
  var name: String = "Li Ming"

  def eat(): Unit = {
    
    
    println("Student eat")
  }

  // 重写非抽象属性和非抽象方法,必须加override
  // 重写的非抽象属性必须是由val修饰的
  override val age: Int = 21

  override def sleep(): Unit = {
    
    
    println("Student sleep")
  }
}

注意:

  • 子类重写父类的抽象方法和抽象属性时,override关键字可以省略
  • 子类重写父类的非抽象方法和非抽象属性时,override关键字不可以省略
  • 子类重写非抽象属性时,属性必须由val修饰。

猜你喜欢

转载自blog.csdn.net/FlatTiger/article/details/114522973