🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[success] # 引用类型转换 1. 引用数据类型之间的转换方式有两种:**自动类型转换** 和 **强制类型转换** 1.1. **自动类型转换**主要指**小类型向大类型**的转换,也就是子类转为父类,也叫做向上转型 1.2. **强制类型转换**主要指**大类型向小类型**的转换,也就是父类转为子类,也叫做向下转型或显式类型转换。 2. 引用数据类型之间的**转换必须发生在父子类之间**,否则编译报错 3. `if(引用变量 instanceof 数据类型)` 判断引用变量指向的对象是否为后面的数据类型 >[danger] ##### 举个例子 * 父类 ~~~ public class Shape { } ~~~ * 子类 ~~~ public class Rect extends Shape{ public void show() { super.show(); System.out.println("长度"+getLen()+"宽度是"+getWid()); } } ~~~ ~~~ public class Circle extends Shape{ } ~~~ * 如果此时是多态写法 但想调用子类独有方法 ~~~ Shape sr = new Rect() // sr.show() 在编译期间会报错,但运行期间好用的为了解决编译期间报错用向下转型 ((Rect) sr).show() // 此时会报错但是在运行阶段ClassCastException 转换类型异常,编译阶段没有报错,原因是上面已经 // 告诉了sr 是Rect 类型,但是因为编译阶段只要是父子类型就可以进行类型转换此时符合转换规则,但是 // 当运行时候发现已经强调过sr类型为Rect 因此运行会报错 Circle c1 = (Circle)sr ~~~