【Scala】isInstanceOf 与 classOf的对比,代码+注解简洁明了

class Animal {

}

class Cat extends Animal {

}

object Cat {
  def main(args: Array[String]): Unit = {
    //新创建一个Cat对象
    val cat1: Cat = new Cat
    //创建另一个Cat对象
    val cat2: Animal = new Cat    //因为Cat继承了Animal类,所以指定类型也可以是Animal

    //isInstanceOf只能粗略判断指定对象是不是一个类的实例及其子类的实例,并不能精准判断来自哪个类
    println(cat1.isInstanceOf[Cat])
    println(cat2.isInstanceOf[Animal])
    println("------------")
    println(cat2.isInstanceOf[Cat])
    println(cat2.isInstanceOf[Animal])

    println("============")
    //而 getClass == classOf[]可以精准判断指定对象是否是某一个类的实例
    println(cat1.getClass == classOf[Cat])
    println(cat1.getClass == classOf[Animal])
    println("------------")
    println(cat2.getClass == classOf[Cat])
    println(cat2.getClass == classOf[Animal])
  }
}

显示创建对象的指定类型需要勾选☑️此选项
在这里插入图片描述

控制台结果

true
true
------------
true
true
============
true
false
------------
true
false
原文地址:https://www.cnblogs.com/zzzsw0412/p/12772402.html