向上转型
子类引用的对象转化为父类类型称为向上转型,通俗点说就是将子类对象转化为父类对象,此处父类对象可以是接口。格式是Person p = new Person();
向上转型也是多态的条件之一,所以用到的地方非常多。
看一个示例:
class Animal {
public void eat(){
System.out.println("animal eatting...");
}
}
public class Bird extends Animal{
public void eat(){
System.out.println("我吃昆虫");
}
public void fly(){
System.out.println("我能飞");
}
}
public class Dog extends Animal{
public void eat(){
System.out.println("我吃肉");
}
public void run(){
System.out.println("我会跑");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Bird(); //向上转型
animal.eat();
animal = new Dog();
animal.eat();
}
}
//结果:
//我吃昆虫
//我吃肉
向上转型会遇到的问题
- 向上转型时,子类单独定义的方法会缺失。譬如上面的示例,当animal实例指向引用时是无法调用run方法的,
animal.run()
会报错。 - 子类引用不能指向父类对象。Bird b = (bird)new Animal()这样是错误的。
向上转型的好处(其实也是多态的好处)
- 减少重复代码,使代码变得简洁。
- 提高系统扩展性。
向下转型
与向上转型相对应的就是向下转型了。向下转型是把父类对象转为子类对象。
注意事项
- 向下转型的前提是父类对象指向的是子类对象(也就是说,在向下转型之前,它得先向上转型)
- 向下转型只能转型为本类对象(鸟是不能变成狗的)。