我们在写java程序的时候,经常对我们的引用类型进行转换。
1.向上类型转换(隐式/自动类型转换),是小类型到大类型的转换
2.向下类型转换(强制类型转换),是大类型到小类型。
3.使用instanceof
运算符,来解决引用对象的类型,避免类型转换的安全性问题
// 创建一个子类对象
Dog dog = new Dog();
// 可以用一个父类的引用指向子类对象
Animal animal = dog; // 没有问题的(向上类型转换/自动类型提升)
// 如果再次将父类引用转换成子类引用
Dog dog1 = animal; // 这样上存在风险的,编译器上不允许我们这样做的
那我们怎么来解决这个问题呢?
Dog dog1 = (Dog)animal; // 强制转换
我们把这个就叫做“向下类型转换”或者叫“强制类型转换”。
Cat cat = (Cat)animal;
/*
1.强制转换为Cat类型,编译器不会报错
2.运行的时候会出错,因为真正的开辟的内存空间上Dog类型的,程序运行会发现2个类型不匹配,所以报错
*/
可以利用instanceof
来规避这个问题:
if(animal instanceof Cat){
Cat cat = (Cat)animal;
}