1、同一个对象在被造型为不同类型时,有不同的功能。
2、同一类型的引用在指向不同的对象时,有不同的实现--------所有抽象方法都是多态的,因为抽象方法是强制重写,也就是同一种方法,实现的方法体时不一样的。
3、强制类型转换,成功地两个条件:<1>引用所指向的对象,就是该类的类型
<2>引用所指向的对象继承了该类或实现了该接口
若不满足以上两个条件之一,则会发生ClassCastException类型转换异常
为防止此异常的发生,建议在强转之前通过instanceof来判断引用指向的对象是否为该类型,instanceof会返回true或false的结果,满足强转条件返回true,否则返回false
何时需要强转:向上造型后,若想访问的东西在超类中没有,则需要强转。
public class Aoo {
}
public class Boo extends Aoo implements Inter{
}
public class Coo extends Aoo{
}
public interface Inter {
}
public class MulitTypeDemo {
public static void main(String[] args) {
/*
* 成功的条件1:引用所指向的对象,就是该类型
* 成功地条件2:引用所指向的对象,实现了该接口或继承了该类
*/
Aoo o =new Boo();//向上造型
Boo o1=(Boo) o;//引用o所指向的对象,就是Boo类型------符合条件
Inter o2=(Inter)o;//引用o所指向的对象,实现了Inter接口------符合条件
//Coo o3=(Coo)o; //运行时会发生ClassCastException错误
//一般这样判断后再强转
if(o instanceof Coo){
Coo o4=(Coo)o;
}else {
System.out.println("o不是Coo类型");
}
}
}