多态有时需要父类调用子类,这个时候就需要进行转型了!
转型的使用及转型的注意事项如下:
定义类跟方法
package stduy;
abstract class Animal{
abstract void eat();
}
class Dog extends Animal{
public void eat() {
System.out.println("啃骨头!");
}
public void lookHome() {
System.out.println("看家!");
}
}
class Cat extends Animal{
public void eat() {
System.out.println("吃鱼!");
}
public void catchMouse() {
System.out.println("抓老鼠!");
}
}
接下来
* dog与a的区别在于,a能定义成其他的子类,而dog值能是Dog类型
* 但是a不能调用Dog类中特有的方法。a只能调用Animal中的方法。
* 但是可以向下转型,转成子类类型
Dog dog = new Dog();
Cat cat = new Cat();
Animal a = new Dog();
a.eat();
Dog d = (Dog)a;
d.lookHome();
再就是转型的时候的注意事项:
//向下转型前应该保证转型的健壮性
/*
* 在进行子类特有方法使用时,要进行向下转型
* 转型之前一定要先判断,否则容易发生ClassCastException
*
* 判断引用类型,要使用一个关键字完成,关键字:instanceof
*/
Dog dog2 = new Dog();
method(dog2);
public static void method(Animal a) {
a.eat();
if(a instanceof Cat) {
Cat c = (Cat)a;
c.catchMouse();
}
else if(a instanceof Dog) {
Dog d = (Dog)a;
d.lookHome();
}
}