说明:多态是继封装、继承之后,面向对象的第三大特性。
一、多态概述
简单来说,多态就是同一行为,具有的多个不同表现形式。比如对于学生来说,即使学生又是人。
多态的核心:父类引用指向子类对象
二、多态的格式
父类类型 变量名 = new 子类对象;
变量名.方法名();
Fu f = new Zi();
f.method();
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行子类重写后方法。
三、啥时候用多态
1、当父类是抽象类或是接口时,不能实例化时,可以运用多态,向上转型。举例:
List list = new ArrayList();
2、普通类中,通过子类重写父类中的方法,这样就可以访问子类中的重写方法。
四、引用类型转换(多态的转型)
引用类型转换分为向上转型与向下转型两种:
- 向上转型:当父类引用指向一个子类对象时,便是向上转型。向上转型可以调用重写的父类方法。
- 向下转型:父类类型向子类类型转换,便是向下转型。向下转型可以实现子类特有方法。
五、应用举例
//定义动物类
abstract class Animal {
abstract void eat();
}
//猫类继承动物类
class Cat extends Animal {
//重写父类中eat方法
public void eat() {
System.out.println("吃鱼");
}
//子类中特有方法
public void catchMouse() {
System.out.println("抓老鼠");
}
}
//狗类继承动物类
class Dog extends Animal {
public void eat() {
System.out.println("吃骨头");
}
public void watchHouse() {
System.out.println("看家");
}
}
测试类:
public class Test {
public static void main(String[] args) {
// 向上转型
// 调用的是 Cat 的 eat
Animal a = new Cat();
a.eat();
// 向下转型
// 调用的是 Cat 的 catchMouse
Cat c = (Cat) a;
c.catchMouse();
}
}