12-Scala类型转换

object TypeConvert {
  def main(args: Array[String]): Unit = {
    /*
    * classOf 可以得到类名
    * isInstanceOf 判断是否为指定类型
    * asInstanceOf 类型转换
    * 注意点:
    *  1 需要使用isInstanceOf 判断对象是否为指定类的对象,如果是的话,则可以使用 asInstanceOf 将对象转换为指定类型;
    *  2 p.isInstanceOf[XX] 判断 p 是否为 XX 对象的实例;p.asInstanceOf[XX] 把 p 转换成 XX 对象的实例
    *  3 如果没有用isInstanceOf 先判断对象是否为指定类的实例,就直接用 asInstanceOf 转换,则可能会抛出异常;
    *  4 对象是 null,则isInstanceOf 一定返回 false, asInstanceOf 一定返回 null;
    *  5 p.asInstanceOf[XX] 并没有该改变p的类型,而是返回了一个新的类型
    * */
    val s = "king"
    println(s.getClass.getName()) // 反射机制

    var person20 = new Person200

    println(classOf[Person200]) //获取类名。

    var emp = new Emp100
    // 将子类的引用给父类(向上转换,自动)
    person20 = emp

    var emp2 = person20 // 类型Person200
    // 将父类的引用重新转换成子类的引用(多态),即向下转移
    if (person20.isInstanceOf[Person200]){
      var emp3 = person20.asInstanceOf[Emp100]
      emp3.sayHello()

    }

  }
}

class Person200{
  var name:String = _

  def  printName(): Unit ={
    println("Person100 printName() "+ name)
  }

  def SayHi(): Unit ={
    println("SayHi.....")
  }

  def sayHello(): Unit ={
    println("hello nihao")
  }
}

class Emp100 extends Person200{
  override def printName(): Unit = {
    println("Emp100 printName() "+ name)
    super.printName()
    SayHi()

  }
}

Guess you like

Origin blog.csdn.net/u014644167/article/details/109130171
Recommended