1.何时须要用到强制类型转换spa
当把子类变量赋给父类引用变量时,这个父类引用变量只能调用父类拥有的方法,code
不能调用子类特有的方法,即便它实际引用的是子类变量。对象
若是须要让这个父类引用变量调用它子类的方法,就必须把它强制转换成子类类型。blog
2.引用类型之间要强制转换成功须要有什么条件io
把父类实例转换成子类类型,则这个对象必须其实是子类实例才行,不然将在运行时引起ClassCastException。ast
3.让程序更健壮的写法:class
在强制转换前使用instanceof运算符判断是否能够成功转换。变量
示例以下:引用
1 class Base 2 { 3 private int value; 4 public void say() 5 { 6 System.out.println("Base class"); 7 } 8 } 9 10 class Sub extends Base 11 { 12 public void say() 13 { 14 System.out.println("Sub class"); 15 } 16 //子类的特有方法 17 public void read() 18 { 19 System.out.println("Are you sleeping?"); 20 } 21 } 22 public class Test 23 { 24 public static void main(String[] args) 25 { 26 Base base=new Sub(); 27 base.say();//多态,会调用子类的方法 28 29 if(base instanceof Sub)//先判断可否转换成功 30 { 31 ((Sub)base).read();//强转事后才能够调用read方法 32 } 33 34 } 35 }
总结:程序
两种可能混淆的状况:
把子类对象sub赋值给父类对象base,若是调用base中子类和父类都拥有的方法(子类重写的父类方法),那么这时实际上执行的是子类的方法,
这种现象叫作多态;
若是想用base对象调用子类特有的方法,就必须把base对象强转成子类对象后,才能够调用。