向上转型和向下转型的概念。
向上转型:子-->父(upcasting)又被称为自动类型转换: Animal a = new cat () ;l
下转型:父--->(downcasting)又被称为强制类型转换:cat c = (cat)a;需要添加强制类型转换符。
什么时候需要向下转型?
需要调用或者执行子类对象中特有的方法-必须进行向下转型,才可以调用。
向下转型有风险吗?
容易出现ClassCastException(类型转换异常)怎么避免这个风险?
instanceof运算符判断true或false,例如用if(c instanceof cat)如果是cat类判断为true,继续向下执行其中cat的子类独有方法。反之,直接就不执行后续代码,可以在程序运行阶段动态的判断某个引用指向的对象是否为某一种类型。
养成好习惯,向下转型之前一定要使用instanceof运算符进行判断。
不管是向上转型还是向下转型,首先他们之间必须有继承关系,这样编译器就不会报错。
什么是多态。
多种形态,多种状态,编译和运行有两个不同的状态。
编译期叫做静态绑定。
运行期叫做动态绑定。Animal a = new cat() ;
//编译的时候编译器发现a的类型是Animal,所以编译器会去Animal类中找move()方法/找到了,绑定,编译通过。但是运行的时候和底层堆内存当中的实际对象有关
/真正执行的时候会自动调用"堆内存中真实对象"的相关方法。
a. move () ;
多态的典型代码:父类型的引用指向子类型的对象。(java中允许这样写代码!!! )
需要调用或者执行子类对象中特有的方法-必须进行向下转型,才可以调用。
什么时候必须进行向下转型?
调用子类对象上特有的方法时。