package edu.lulu.oop.chapter6
// scala类型的检查与转换
object Tes05 {
def main(args: Array[String]): Unit = {
//一.获取完整类名的方式
//1.1.classof[]获取类名
println(classOf[String])
//1.2.通过对象的发射
println("wanglulu".getClass.getName)
// 二.判断一个对象是否是是某个类的实例
println("wanglulu".isInstanceOf[String])
// 三.scala的类型转化
//提起scala的类型转化,那么我们不得不提oop的三大特征之一的多态
//多态的含义指的是子类的引用可以赋给父类(自动转化),此时该对象就变成父类对象了
//并且只含有父类的属性与方法,只有强制转化才可以将父类的引用转变为子类的引用(你可以看做是把父类对象变成子类对象)
//这时此对象 拥有了子类的方法与属性,同时继承了父类方法与属性
// 3.4创建父类对象与子类对象
var p = new Persons
var s = new Student
var s1 = new Student
var t = new Teacher
//子类的引用可以赋给父类 (自动转化)
p = s
// 子类对象永远都是父类的实例,虽然p(Persons)但由于指向了s(Teacher)所以也是Sudent的实例
println(p.isInstanceOf[Persons])
println(p.isInstanceOf[Teacher])
println(p.isInstanceOf[Student])
// 把父类的引用赋给子类引用此时需要进行强制转化
s1 = p.asInstanceOf[Student]
s1.study()
}
}
// 3.1.定义一个父类
class Persons{
var name:String = "wanglulu"
def breathe(): Unit ={
println("我是一个可以呼吸的人")
}
}
// 3.2 定义一个子类
class Student extends Persons{
var stId:Int = 10
def study(): Unit ={
println("我是一位学生,我擅长学习")
}
}
// 3.3 再定义一个子类
class Teacher extends Persons{
def work(): Unit ={
println("我是一名老师,我擅长教书")
}
}