抽象类:动物有方法cry();
具体类1:猫extends动物实现方法cry()
具体类2:狗extends动物实现方法cry()
动物dog=new狗();
动物cat=new猫();
cat.cry();//结果是喵喵~叫
dog.cry();//结虹是旺旺~叫
由于dog是new出来的是狗而cat是new出来的猫,所以虽然大家都属于动物,但其实不是同一种动物。并且想让狗学猫叫,猫学狗叫是不可能的
动物dog=new狗();其实相当于理解成以下两条语句
1。狗dg=new狗();
2。动物dog=(动物)dg;//将dg的狗类型转化成了动物类型
所以调用时当然只会调用狗的方法旺旺旺,而不会去调用其它动物的方法!
所以问题的关键在于生成时是new狗还是new猫!因为动物是不能被new出来的(抽象类不能实例化)所以我们就能分出执行的是哪个方法;
请参考