动态绑定也指多态:是指在执行期间(而非编译期间)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法,
下面的例子是根据Lady对象的成员变量pet所引用的不同的是积累形成而调用相应的enjoy方法
多态:要有继承;要有重写;父类引用指向子类对象
当这三个对象都被满足的时候调用父类里面被重写的方法,实级当中new 的是哪一个子类对象就调用哪一个子类的方法
class Aniaml {
public String name;
Animal (String name) {
this.name = name;
public void enjoy(){
System.out.println("叫声......");
}
}
}
class Cat extends Animal {
private String eyeColor;
Cat(String n,String f) {
super(n);
this.eyeColor = eyeColor;
}
public void enjoy() {
System.out.println("猫叫声......");
}
}
class Bird extends Animal {
private String featherColor;
Bird(String n,String f) {
super(n);
featherColor = f;
}
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 myEnjoy(){
pet.enjoy();
}
}
public class Test {
public static void main(String args[]) {
//Lady l3 = new Lady("l3",new Bird("birthname","green"));
Cat c = new Cat("catname","blue");
Bird d = new Bird("dogname","black");
Lady l1 = new Lady("l1",c);
Lady l2 = new Lady("l2",d);
}
}
如果按道理来说他应该打印叫声...,但是事实上他打印的是,猫叫声.....和狗叫声...... ,这也就牵扯到我们 的动态绑定也称多态。
来看我们的内存的图: