动态绑定多态

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

下面的例子是根据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);

  }

}

如果按道理来说他应该打印叫声...,但是事实上他打印的是,猫叫声.....和狗叫声...... ,这也就牵扯到我们 的动态绑定也称多态。

来看我们的内存的图:

 

 

 

 

 

 

posted @ 2018-12-27 09:59  雪地里的Alan  阅读(198)  评论(0编辑  收藏  举报