声明:如果本文有错误,希望指出。
虽然学习和使用 Java 好多年了,但是对于多态的整体概念还是有点模糊。今天在看之前写的关于反射博文时,突然想到了 Java 的三大特性——多态。其他两个分别是**封装、继承**。只是想起多态的继承、重写,对于别的有点模糊了,于是就像自己整理下。
多态
多态指的是对象的多种形态。继承是多态的实现基础。当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
多态的分类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| public class PolymorphicCase {
public static void main(String[] args) { show(new Cat()); show(new Dog());
Animal animal = new Cat(); animal.eat(); animal.work(); Cat cat = (Cat) animal; cat.work(); }
public static void show(Animal animal) { animal.eat(); if (animal instanceof Cat) { Cat cat = (Cat) animal; cat.work(); } if (animal instanceof Dog) { Dog dog = (Dog) animal; dog.work(); } } }
abstract class Animal { abstract void eat(); }
class Cat extends Animal {
@Override void eat() { System.out.println("猫吃鱼...."); }
public void work() { System.out.println("猫抓老鼠...."); } }
class Dog extends Animal {
@Override void eat() { System.out.println("狗吃骨头...."); }
public void work() { System.out.println("look door...."); } }
|
向上转型
Animal animal = new Cat();
对于这个对象的创建,就是体现了向上转型。
子类引用的对象转换为父类类型成为向上转型。通俗的说就是将子类对象转化为父类对象,此处对象可以是接口。
向下转型
Cat cat = (Cat) animal;
这里就是向下转型。与向上转型相对应的就是向下转型了。向下转型是把父类对象转为子类对象。
多态的实现
总结
多态的优点
- 消除类型的耦合关系
- 可替换性
- 可扩充性
- 接口性
- 灵活性
- 简化性
多态存在的三个必要条件
Reference