6种基础数据类型:byte、short、int、long、float和double的相互转换规则,即:当从低精度数据类型向高精度数据类型转换时,实行自动转换,这种类型转换技术称为向上转换;当从高精度数据类型向低精度数据类型转换时,需要使用强制类型转换符执行强制转换,这种称为向下转换。
当然,对于引用数据类型,这种转换技术也是适用的。
对于引用数据类型,在父类和子类的继承层次关系中,沿着子类向父类转换是向上转型,是自动转换的;而沿着父类向子类转型是向下转型,必须使用强制类型转换。
以下是对于父类与子类的继承关系
父类相对于子类来说是大范围的类型,Animal是父类,Cat和Dog是子类,所以对于子类Animal来说,它的范围更大,包含一切动物,包括Cat类和Dog类。
1.向上转型(自动转换):当子类向父类转型时,子类范围更小,所以可以直接自动转换,这个过程是默认的。而多态中,当父类引用指向一个子类对象时,就是向上转型,是自动转换的。对于
Animal animal = new Cat(); 这条语句,是子类Cat向父类Animal转型,属于向上转型,是隐式自动发生,所以不会有问题。
2.向下转型(强制转换):向下转型就是由父类向下转型的过程,这个过程是强制的。一个需要将父类对象转为子类对象,可以使用强制类型转换的格式,这便是向下转型。
比如:
Animal animal = new Cat();
Cat cat = (Cat) animal;
cat.playBall();// 访问猫咪的特有⽅法
System.out.println(cat.food); // 访问猫咪的特有字段
合并一下,就是:
Animal animal = new Cat();
((Cat) animal).playBall();
System.out.println(((Cat) animal).food);