一、含义
多态是指同一行为具有多个不同的表现形式,其与封装、继承一同作为面向对象编程的三大特性。
二、Java运行时多态实现的前提
1、运用了继承或者实现
2、实现了方法的重写
3、使用了父类引用指向子类对象
三、多态的体现
格式:
父类类型 变量名 = new 子类对象;
变量名.方法名();
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,则执行子类重写后的方法。
四、多态的作用
在实际开发的过程中,使用父类类型作为方法形式参数,传递子类对象给方法,进行方法的调用,可以实现使用一个方法对多种子类对象进行同一个操作,提高了程序的扩展性,也简化了代码的开发(不再需要为了对多种子类对象实现同一个功能而编写多个函数)。
例:
public abstract class Animal{
public abstract void eat();
}
class Cat extends Animal{
public void eat(){
System.out.println("eat fish");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("eat bones");
}
}
public class Test{
public static void main(String[] args){
Cat cat = new Cat();
Dog dog = new Dog();
showAnimalEat(cat);
showAnimalEat(dog);
}
/*使用Cat和Dog的父类Animal作为方法的参数,就可以通过只写一个方法而实现调用两类的不同的eat()
方法,去实现同一个功能—————吃。
*/
public static void showAnimalEat(Animal animal){
animal.eat();
}
}
五、引用类型转换
1、向上转型
多态本身是子类类型,向父类类型转换的过程。这个过程是默认的,当父类引用指向一个子类对象时,便发生了向上转型。
2、向下转型
父类类型向子类类型转换的过程,这个过程是强制的(即需要手动使用)。这种转型一般使用在将已经向上转型的子类对象,将父类引用转为子类引用。
例:
Animal animal = new Cat();//向上转型
Cat cat = (Cat) animal;//向下转型
3、之所以会存在转型,是因为在使用多态方式调用方法时,若父类中不存在该方法,会出现编译错误,这意味着我们无法调用子类特有的方法。这会给我们的开发带来一点小麻烦,因此,为了实现调用子类特有的方法,我们需要向下转型。
注意:在转换之前,最好先判断一下你想要转型的那个父类引用指向的是不是你想转型为的那个子类的对象(使用instanceof),否则,会出现ClassCastException错误。
参考:黑马程序员Java基础课程课件