鱼欲遇雨:每日都学习一点,持之以恒,天道酬勤!不能用电脑时,提前补上!(2012.9.6改)
动态绑定和多态
1 动态绑定是指“在执行期间(而非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法
2 上面例子中,根据Lady对象的成员变量pet所引用的不同的实际类型而调用相应的enjoy方法
3 必要条件
1 要有继承
2 要有重写
3 父类引用指向子类对象
//TestPolymoph.java
class 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();
}
}
部分内存分析