多态:多种形态
-
意义:
-
同一个对象被造型为不同的类型时,有不同的功能------所有对象都是多态的
----对象多态:我、你、水......
-
同一类型的引用指向不同的对象时,有不同的实现------所有抽象方法都是多态的
----行为多态:cut()、getImage()、move()、getScore()......
-
-
向上造型/自动类型转换:
-
超类型的引用指向派生类的对象(前面是超类型,后面是派生类型)
-
能点出来什么,看引用的类型(这是规定)
-
能向上造型成为的类型有:超类+所实现的接口
-
-
强制类型转换,成功的条件只有如下两种:
-
引用所指向的对象,就是该类型
-
引用所指向的对象,实现了该接口或继承了该类
-
强转若不符合如上条件,则发生ClassCastException类型转换异常
建议:在强转之前一定要先通过instanceof来判断引用的对象是否是该类型
强转时若符合如上的两个条件,则instanceof返回true,若不符合则返回false
何时需要强转:你想访问的东西在超类中没有,那就需要强转
-
-
public class MultiType {
public static void main(String[] args) {
//条件1:引用所指向的对象,就是该类型
//条件2:引用所指向的对象,实现了该接口或继承了该类
Aoo o = new Boo(); //向上造型
Boo o1 = (Boo)o; //引用o所指向的对象,就是Boo类型-------符合条件1
Inter o2 = (Inter)o; //引用o所指向的对象,实现了Inter接口---符合条件2
//Coo o3 = (Coo)o; //运行时会发生ClassCastException类型转换异常
//判断o是否是Coo类型(与强转成功条件完全匹配)
if(o instanceof Coo){ //false
Coo o4 = (Coo)o; //instanceof若为true,则强转一定成功
}else{
System.out.println("o不是Coo类型");
}
}
}
interface Inter{ }
class Aoo{ }
class Boo extends Aoo implements Inter{ }
class Coo extends Aoo{ }