Java动态绑定来自于继承体现子类继承父类子类重新覆盖了父类的方法,就是动态绑定,以下举例:

动态绑定是在运行期间

动物类:

/**
 * 创建一个动物类
 * @author Liudeli
 */
public class Animal {

    /**
     * 此函数打印一句话,显示样式
     */
    public void showStyle() {
        System.out.println("Animal showStyle()...");
    }

}

人类:

/**
 * 定义一个人类
 * @author Liudeli
 */
public class Person extends Animal{

    /**
     * 重写父类的 showStyle 方法
     */
    public void showStyle() {
        System.out.println("Person showStyle()...");
    }

}

狗类:

/**
 * 定义一个狗类
 * @author Liudeli
 */
public class Dog extends Animal{

    /**
     * 重写父类 showStyle 方法
     */
    public void showStyle() {
        System.out.println("Dog showStyle()...");
    }

}

测试程序:

/**
 * 测试程序
 * @author Liudeli
 */
public class Main {

    public static void main(String[] args) {

        // 当父类引用去实例化子类,会执行子类中的方法,这个过程就是动态加载
        Animal person = new Person();
        person.showStyle();

        Animal dog = new Dog();
        dog.showStyle();

    }

}

运行结果:
这里写图片描述



静态绑定:

静态绑定是在编译期间

/**
 * 定义动物类
 * @author Liudeli
 */
class Animal {};

/**
 * 定义人类继承动物类
 * @author Liudeli
 */
class Person extends Animal {};

/**
 * 定义够累继承动物类
 * @author Liudeli
 */
class Dog extends Animal {};

/**
 * 此类包含了执行父类子类
 * @author Liudeli
 */
public class MyRun {

    public void showMethod(Animal animal) {
        System.out.println("Animal showMethod()...");
    }

    /**
     * 方法重载
     * @param dog
     */
    public void showMethod(Person person) {
        System.out.println("Person showMethod()...");
    }

    /**
     * 方法重载
     * @param dog
     */
    public void showMethod(Dog dog) {
        System.out.println("Dog showMethod()...");
    }

}

测试程序:

/**
 * 测试程序
 * @author Liudeli
 */
public class Main {

    public static void main(String[] args) {

        MyRun myRun = new MyRun();

        myRun.showMethod(new Animal());
        myRun.showMethod(new Dog());
        myRun.showMethod(new Person());

    }

}

运行结果:
这里写图片描述


其实在程序编译的时候就决定会使用 showMethod(Animal animal) {}方法,不管在运行的时候传入的实际对象是什么,还是会执行 showMethod(Animal animal) {}方法,Java重载是静态绑定的。

以上还有很多不足之处,还没有来得及完善,谢谢大家观看!!!!!!!


谢谢大家的观看,更多精彩技术博客,会不断的更新,请大家访问,
刘德利CSDN博客, http://blog.csdn.net/u011967006