第03章 面向对象 39 多态1

来源:互联网 发布:c语言的架构 编辑:程序博客网 时间:2024/05/16 12:32

鱼欲遇雨:每日都学习一点,持之以恒,天道酬勤!不能用电脑时,提前补上!(2012.9.6改)

 

动态绑定和多态

1   动态绑定是指“在执行期间(而非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法

2   上面例子中,根据Lady对象的成员变量pet所引用的不同的实际类型而调用相应的enjoy方法

3   必要条件

   1   要有继承

   2   要有重写

   3   父类引用指向子类对象

 

//TestPolymoph.javaclass Animal {private String name;Animal(String name) {this.name = name;}public void enjoy() {System.out.println("叫声........");}}class Cat extends Animal {public String eyesColor;Cat(String n, String c) {super(n);this.eyesColor = c;}public void enjoy() {System.out.println("猫叫声........");}}class Dog extends Animal {public String furColor;Dog(String n, String c) {super(n);this.furColor = c;}public void enjoy() {System.out.println("狗叫声........");}}class Bird extends Animal{Bird() {super("bird");}public void enjoy() {System.out.println("鸟叫声.......");}}class Lady {private String name;private Animal pet;Lady(String name, Animal pet) {this.name = name;this.pet = pet;}public void myPetEnjoy() {pet.enjoy();}}public class Test {public static void main(String args[]) {Cat c = new Cat("catname", "blue");Dog d = new Dog("dogname", "black");Bird b = new Bird();Lady l1 = new Lady("11", c);Lady l2 = new Lady("12", d);Lady l3 = new Lady("13", b);l1.myPetEnjoy();        l2.myPetEnjoy();l3.myPetEnjoy();}}

 

部分内存分析

 

 

 

原创粉丝点击