scala抽象类实战

时间:2022-07-21 18:38:06

实战一:

声明一个抽象类(SuperTeacher):(超级老师)

abstract class SuperTeacher(val name : String){
  var id : Int
  var age : Int
  def teach
}

 一个不可变属性,和两个可变属性(主键和年龄),一个未实现方法(教书)

声明一个子类(TeacherForMaths):

class TeacherForMaths(name : String) extends SuperTeacher(name){
  
  override var id = name.hashCode()
  override var age = 29
  override def teach{
    println("Teaching!!!")
  }
}

 抽象类的测试类

object AbstractClassOps{
  def main(args: Array[String]) {
	  val teacher = new TeacherForMaths("Spark")
	  teacher.teach
	  
	  println("teacher.id" + ":" + teacher.id)
	  println(teacher.name + ":" + teacher.age)
    
  }
}

 实战二:

 抽象事件类:event,对于一个事件来说,事件名称决定他的不同,所以名称是不可变的,可以将时间和内容的不同来区分不同的事件

/**
  * 事件的抽象类,由事件的三要素组成,事件名称、发生时间(时间戳)
  * 事件内容
  * @param name 事件名称
  */
abstract class Event(val name:String) {
  var time:Long
  var content:String
}

 

 子类基本事件类,子类必须实现父类的未实现的属性的方法,如果不想先初始化,可以用占位符先占用位置,子类中有apply的方法重载。

/**
  * 基本事件类,继承时间的抽象类
  * @param name 事件名称
  */
class BaseEvent(name: String) extends Event(name) {
  var id: String = _
  override var time: Long = _
  override var content: String = _

  override def toString():String ={
    id+","+name+","+time+","+content
  }

}

 


 

object BaseEvent {
  def apply(name: String): BaseEvent = {
    val event = new BaseEvent(name)
    event
  }

  def apply(name: String, id: String): BaseEvent = {
    val event = apply(name)
    event.id = id
    event
  }

  def apply(name: String, id: String, time: Long): BaseEvent = {
    val event = apply(name, id)
    event.time = time
    event
  }

  def apply(name: String, id: String, time: Long, content: String): BaseEvent = {
    val event = apply(name, id, time)
    event.content = content
    event
  }

  def main(args: Array[String]) {
    val event = BaseEvent("name","shsh001",1200132392838L,"scjsncjscnsncas");
    print(event.toString())
  }
}

 


 执行结果:

shsh001,name,1200132392838,scjsncjscnsncas