- 向上类型转换(隐式/自动类型转换),是小类型到大类型的转换
向下类型转换(强制类型转换),是大类型到小类型的转换
值得注意的是向上类型转换是不存在风险的,例如将一个杯子里的说倒到水壶里,正常来讲这样是没有问题的,计算机会自动的帮我们执行向上类型的转换所以也被称为自动类型转换。
而向下类型转换是存在风险的,例如将水壶里的水倒到杯子里面,因为它可能会发生溢出,这种情况也被称为数据的溢出,这样是存在风险的。但是如果程序员愿意做这种事情,我们也可以强制计算机组做这种操作的。但是我们怎么样避免一些风险呢?这里我们就要用到instanceof运算符,来解决引用对象的类型问题,避免类型转换带来的安全性问题。
我们用代码体现一下
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}
class test{
public static void main(String[] args){
Dog dog = new Dog();
Animal animal = dog;//向上类型转换 自动类型转换
Dog dog2 = (Dog)animal;
//但是如果我们把这个父类的引用转换成Cat类型的引用
Cat cat = (Cat)animal;//这里编译器没有检查出错误,但是在运行时会报错说没有办法将这个引用进行转换。
//这是我们就要用到instanceof运算符
//如果animal对象含有Cat类型的元素 就会返回一个true
if(animal instanceof Cat){
Cat cat = (Cat)animal;
}else{
System.out.println("无法进行类型转换");
}
}
}