类内部
本包
子类
外部包
public
√
√
√
√
protected
√
√
√
×
default
√
√
×
×
private
√
×
×
×
举例说明: package cn.itcast.extends_democlass Person1 { val name="super" def getName=this.name}class Student1 extends Person1{ //继承加上关键字 override val name="sub" //子类可以定义自己的field和method val score="A" def getScore=this.score}
如果实例化了子类的对象,但是将其赋予了父类类型的变量,在后续的过程中,又需要将父类类型的变量转换为子类类型的变量,应该如何做?
Class A extends class B
B b=new A
首先,需要使用 isInstanceOf 判断对象是否为指定类的对象,如果是的话,则可以使用 asInstanceOf 将对象转换为指定类型;注意: p.isInstanceOf[XX] 判断 p 是否为 XX 对象的实例;p.asInstanceOf[XX] 把 p 转换成 XX 对象的实例注意:如果没有用 isInstanceOf 先判断对象是否为指定类的实例,就直接用 asInstanceOf 转换,则可能会抛出异常;注意:如果对象是 null,则 isInstanceOf 一定返回 false, asInstanceOf 一定返回 null;Scala与Java类型检查和转换
Scala
Java
obj.isInstanceOf[C]
obj instanceof C
obj.asInstanceOf[C]
(C)obj
classOf[C]
C.class
举例说明: package cn.itcast.extends_democlass Person3 {}class Student3 extends Person3object Student3{ def main (args: Array[String] ) { val p: Person3 = new Student3 var s: Student3 = null //如果对象是 null,则 isInstanceOf 一定返回 false println (s.isInstanceOf[Student3]) // 判断 p 是否为 Student3 对象的实例 if (p.isInstanceOf[Student3] ) { //把 p 转换成 Student3 对象的实例 s = p.asInstanceOf[Student3] } println (s.isInstanceOf[Student3] ) } }
转载于:https://www.cnblogs.com/mediocreWorld/p/11361390.html
