java 动态绑定

动态绑定也叫多态,也叫池绑定,用它的目的是为了提高方法的扩展性,具体怎么用大家可以看下面的代码中的例子。

核心思想

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

abstract class Animal {
  private String name;
  Animal(String name) {this.name = name;}
  /*
  public void enjoy(){
    System.out.println("叫声......");
  }
  */
  public abstract void enjoy();
}


abstract class Cat extends Animal {
  private String eyesColor;
  Cat(String n,String c) {super(n); eyesColor = c;}
  /*
  public void enjoy() {
    System.out.println("猫叫声......");
  }
  */
  //public abstract void enjoy();
}
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");
        
        Lady l1 = new Lady("l1",c);
	l1.myPetEnjoy();
 }
}

内存动态分配图:


           这张图里面先new出来了一只猫,这只猫继承了animal抽象类,通过初始化给猫起了名字,并且给赋给了猫一个蓝色的眼睛,然后new出来了一个lady,她有名字L1,通过初始化ladyladypet指向了我们开始生成的的猫(this.pet=pet做到的),它只能指向猫的父类annimal这个类,此时l1指向了右面的方框,开始调方法了,方法作为一块儿单独的区域放到code seg块中,现在有两个enjoy的方法都在里面放着,一个是父类的,一个是子类的,如果按照引用类型来确定,我们会去调父类的那个方法,如果按照实际类型,也就是new出来的类型来确定的话,我们会去调子类的方法;动态绑定机制就是按照第二种,new出来的类型来确定,更深的机制是在catname这个对象中还有一个enjoy方法指针 ,你new什么对象,他就会去找哪个对象所对应的方法。

总结:

1.既然叫动态绑定,那就说明在动的时候他会产生效果,这就是我们需要记住的。

2.从内存了解了猫叫声是怎么叫出来的,这声音才会听得很舒服。



猜你喜欢

转载自blog.csdn.net/a11112244444/article/details/78640628