多态的理解
多态:事物运行过程中存在不同的状态
多态存在的条件:必须具有继承关系,子类要重写父类的方法,父类引用子类的对象
例如一个父类Animal ,子类 Cat
通过输出结果可以很充分的体现了多态的三个前提
1.必须有继承关系
Cat继承Animal
2.必须重写父类方法
子类Cat重写了父类的eat,rn,sleep方法
3.父类引用子类对象
在测试类中,父类Animal animal=new Cat(),把父类的引用指向了Cat
通过输出结果我们可以发现,被修饰为static以及对成员变量进行引用时,输出的数据是父类的数据,而非子类的数据
我们可以根据多态的特点进行一些总结
成员变量
编译看父类,运行看父类
成员方法
编译看父类,运行看子类,实现动态绑定
静态方法(静态方法更类有关,在类加载是就已经初始化,因此不算重写)
编译看父类,运行看父类
多态也有一些弊端,例如
当我在子类中加入特有变量name和特有方法tea(),父类的引用就无法引用到子类的特有变量和方法,如果需要引用,就必须进行强制转换 Cat c=(Cat)animal,c就会指向最开始在堆中创建的那个对象。
最近在网上看到一个很生动的形容多态的小故事,花木兰替父从军,形容的很深动贴切