本节课详细讲解视频地址:
大数据Spark"蘑菇云"行动Scala继承详解搜狐视频地址:http://my.tv.sohu.com/us/48296654/84698083.shtml
1、父类一般都是抽象类,但是也有些情况不是,这样的话继承的子类不需要修改任何代码就可以运行;
2、isInstanceOf、asInstanceOf解析
isInstanceOf[T]
判断对象是否为T类型的实例。
isInstanceOf和asInstanceOf 由scala.Any类定义,Scala类层级的根类;其中class scala.AnyRef 继承自Any,是所有应引用类型的基类;trait scala.AnyVal 也继承自Any,是所有基本类型的实现的trait。
所以所有对象都自动拥有isInstanceOf和asInstanceOf这两个方法。
特别注意的是 Any 和AnyRef 这两个类属于“编译时类型”(虚拟类型?),不存在于运行时。所以这两者在Scala中都未提供源码,其语义由编译器在编译时构建。
再看一下例子:
scala> 1.isInstanceOf[String]
res0: false
scala> List(1).isInstanceOf[List[String]]
res0: true
由于Scala像Java一样泛型存在类型擦除的原因,List(1).isInstanceOf[List[String]]及相当于List(1).isInstanceOf[List[_]], List(1) 是List的实例.
asInstanceOf[T]
将对象类型强制转换为T类型,子类转换成父类
结论
总而言之,我们把classOf[T]看成Java里的T.class, obj.isInstanceOf[T]看成 obj instanceof T, obj.asInstanceOf[T]看成(T)obj就对了。scala为我们提供了语法糖,但也免不了类型擦除问题的影响。
备注:
资料来源于:DT_大数据梦工厂(Spark"蘑菇云"行动)
更多私密内容,请关注微信公众号:DT_Spark
如果您对大数据Spark感兴趣,可以免费听由王家林老师每天晚上20:00开设的Spark永久免费公开课,地址YY房间号:68917580