引用变量的强制类型转换:
编写java程序时,引用变量只能调用它编译时类型的方法,而不能调用它运行时类型的方法,即使它实际所引用的确实包含该方法。
如果需要这个引用变量调用它运行时类型的方法,则必须把它强制类型转换成运行时类型。强制类型转换需要借助于类型转换运算符。
(1)类型转换运算符是小括号,类型转换运算符的用法是:(type)variable,这种用法可以将variable变量转换成一个type类型的变量。
(2)除此之外,类型转换运算符可以将一个引用变量转换成另一个类型,但有以下需要注意:
1.基本雷类型转换只能在数值类型之间进行,数值类型包括整型,字符型和浮点型。数值类型和布尔类型之间不能进行类型转换。
2.(重点)引用类型之间的转换只能在具有继承关系的两个类型间进行,如果是两个没有任何继承关系的类型,则无法进行类型转换。
如果试图将一个父类实例转换成一个子类实例,则这个对象必须实际上是子类实例才行(即编译时类型为父类类型,而运行时是子类类型),否则将在运行时发生ClassCastException异常
——————————————————————————————————————————————————————————————————————
进行强制类型转换的示例程序:
public class Conversion
{
public static void main(String[] args)
{
double d = 13.4;
long l= (long)d;
System.out.println(l);
int in=5;
//boolean b = (boolean)in; 试图将一个数值变量强制转换为一个布尔变量,将编译出错
Object obj ="hello";
//obi变量的编译时类型为Object,Object与String存在继承关系,可以强制类型转换
//而obi变量的实际类型是String,所以运行时也能通过
String objStr = (String)obj;
System.out.println(obiStr);
//定义一个objPri变量,编译时类型为Object,实际类型为Integer
Object obiPri =new Integer(5);
//objPri变量编译时类型为Object,运行时类型为Integer
//Object与Integer存在继承关系,可以强制类型转换,
//而objpri实际类型是Integer
//所以下面代码将在运行时引发ClassCastException异常
String str =(String)objPri;
}
}