En scala, para probar si un objeto pertenece a una clase determinada, puede utilizar el método isInstanceOf. Utilice el método asInstanceOf para convertir una referencia en una referencia de subclase, que es equivalente a la conversión de tipo coercitivo de Java. classOf se utiliza para obtener el nombre de clase del objeto.
De hecho, el mayor valor de la verificación y conversión de tipos es que puede determinar el tipo de objeto entrante y luego convertirlo en el objeto de subclase correspondiente .
object typeConverse03 {
def main(args: Array[String]): Unit = {
val animal = new Animal
val dog = new Dog
val cat = new Cat
testEat(dog) //向上转型 (多态)
testEat(cat)
testEat(animal)
println("**************")
println(classOf[Animal])
}
def testEat(a : Animal): Unit ={
if(a.isInstanceOf[Dog]){
println(a.asInstanceOf[Dog])
// 这里需要注意a.asInstanceOf[Dog]对a的类型没有任何变化,而是返回的是Dog
a.asInstanceOf[Dog].eat()
}
else if(a.isInstanceOf[Cat]){
a.asInstanceOf[Cat].eat()
}else{
a.eat()
}
}
}
class Animal{
var name = "tom"
def eat(): Unit ={
println(name + " feel very hungry")
}
}
class Dog extends Animal{
override def eat(): Unit = {
println(name + " like eat bone")
}
}
class Cat extends Animal{
override def eat(): Unit = {
println(name + " like eat fish")
}
}
resultado de la operación
com.mo.chapter07.myextends.Dog@1888ff2c
tom like eat bone
tom like eat fish
tom feel very hungry
**************
class com.mo.chapter07.myextends.Animal