多态的理解

多态:事物运行过程中存在不同的状态

多态存在的条件:必须具有继承关系,子类要重写父类的方法,父类引用子类的对象

例如一个父类Animal ,子类 Cat

多态的理解

多态的理解

多态的理解

通过输出结果可以很充分的体现了多态的三个前提

1.必须有继承关系

Cat继承Animal

2.必须重写父类方法

子类Cat重写了父类的eat,rn,sleep方法

3.父类引用子类对象

在测试类中,父类Animal animal=new Cat(),把父类的引用指向了Cat

通过输出结果我们可以发现,被修饰为static以及对成员变量进行引用时,输出的数据是父类的数据,而非子类的数据

我们可以根据多态的特点进行一些总结

成员变量

编译看父类,运行看父类

成员方法

编译看父类,运行看子类,实现动态绑定

静态方法(静态方法更类有关,在类加载是就已经初始化,因此不算重写)

编译看父类,运行看父类

多态也有一些弊端,例如

多态的理解

当我在子类中加入特有变量name和特有方法tea(),父类的引用就无法引用到子类的特有变量和方法,如果需要引用,就必须进行强制转换 Cat c=(Cat)animal,c就会指向最开始在堆中创建的那个对象。

最近在网上看到一个很生动的形容多态的小故事,花木兰替父从军,形容的很深动贴切

多态的理解