寒假学习日报(四十)——继承知识补充

  今天补一下scala的继承知识。

package com.chapter01.extendsabout

object abstractabout {
  def main(args: Array[String]): Unit = {
    val n = new Sub_ABS
    n.cry()
    println("n.name=" + n.name + "	 n.age=" + n.age)
    //匿名子类
    val m = new ABS {
      override var name: String = "k"

      override def cry(): Unit = {
        println("cry匿名子类")
      }
    }
    m.cry()
    m.smile()
    println("m.name=" + m.name + "	 m.age=" + m.age)
  }
}

//抽象字段:没有初始化的字段
//当类含有抽象属性时,需要标注abstract,因为scala中类的属性必须初始化,否则会报错
abstract class ABS {
  //底层不会生成name属性,而是生成name和name_$eq方法
  var name: String  //抽象
  val age: Int = 10 //普通属性
  var num: Int = 0  //普通属性

  def cry() //抽象方法
  def smile(): Unit ={
    println("smile实现方法")
  }
}

class Sub_ABS extends ABS{
  //此处是重写抽象属性,本质上实现了抽象方法,因此override可省略
  var name: String = "SUB"
  //非抽象属性则必须声明override
  override val age: Int = 20
  //var变量使用override重写时,代码段不会报错,但运行时会抛出错误
  //override var num: Int = 2
  //***因此var变量重写必须使用抽象方法

  //override可省略
  def cry(): Unit = {
    println("cry抽象方法")
  }
}

 在家的学习效率真不算高,慢慢来吧。要稳住心态才行。

原文地址:https://www.cnblogs.com/20183711PYD/p/14413324.html