一、例子
运行结果:
—狗叫声—
二:分析
Dog d = new Dog("Hachi","yellow");Lady l1 = new Lady("lili",d);l1.myPetEnjoy();
调用Lady的myPetEnjoy()方法。这里有两个enjoy()方法,一个是父类Animal的,一个是Dog的。
那么真正调用谁的呢?这里有一个规则,new Lady("lili",d);堆内存中,真正的是谁,就调用谁的方法,而不是由引用Animal pet 决定的。这就是动态绑定(在java运行期,动的时候,才会去绑定。)
动态绑定的优点,可以随时扩展功能,比如Lady想养一只猫,只需要按照Dog的形式,创建一只猫。
Cat c = newCat("mimi","yellow");Lady l1 = new Lady("lili",c);l1.myPetEnjoy();
Lady内部的代码,完全不用动就可以了,这是面向对象一个很重要的特性。
三:总结
多态实现的条件
(1)要有继承
(2)要有重写
(3)父类引用指向子类对象
你怎么样对待别人被人就怎么样对待你。