静态绑定:
在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现。例如:C。针对java简单的可以理解为程序编译期的绑定;这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定

动态绑定:
在运行时根据具体对象的类型进行绑定。
动态绑定的典型发生在父类和子类的转换声明之下
比如:Parent p = new Children();

总结:
声明的是父类的引用,但是执行过程中调用的是子类的对象,程序先寻找子类对象的method方法,但是没有找到,于是向上转型去父类寻找。
但是子类的对象调用的是父类的成员变量。 所以必须明确,运行时绑定,针对的只是对象的方法。 如果试图调用子类的成员变量name,该怎么做? 最简单的就是将该成员变量封装成方法getter形式
example1:

package test;

public class Father {

    public void method(){
        System.out.println("父类方法,对象类型:"+this.getClass()+".");
    }
}
package test;

/**
 * 声明的是父类的引用,但是执行过程中调用的是子类的对象,
 * 程序先寻找子类对象的method方法,但是没有找到,
 * 于是向上转型去父类寻找
 * @author Administrator
 *
 */
public class Son extends Father{

    public static void main(String[] args) {
        Father sample=new Son();//向上转型
        sample.method();
    }

}

输出:
父类方法,对象类型:class test.Son.

example2:

package test;

public class Father {

    public void method(){
        System.out.println("父类方法,对象类型:"+this.getClass()+".");
    }
}


package test;
/**
 * 由于子类重写了父类的method方法,所以会调用子类的method方法
 * 执行,因为子类对象有method方法而没有向上转型去寻找
 * 
 * @author Administrator
 *
 */
public class Son1 extends Father{

    public void method(){
        System.out.println("子类方法,对象类型:"+this.getClass());
    }

    public static void main(String[] args) {
        Father sample=new Son1();
        sample.method();
    }
}

输出:
子类方法,对象类型:class test.Son1

example3:

package test1;

public class Father {

    protected String name="父亲属性";

    public void method(){
        System.out.println("父类方法,对象类型:"+this.getClass());
    }
}
package test1;

/**
 * 这个结果表明,子类的对象调用的是父类的成员变量。
 * 所以必须明确,运行时绑定,针对的只是对象的方法。
 * 如果试图调用子类的成员变量name,该怎么做?
 * 最简单的就是将该成员变量封装成方法getter形式
 * @author Administrator
 *
 */
public class Son extends Father{

    protected String name="儿子属性";

    public void method(){
        System.out.println("子类方法,对象类型:"+this.getClass());
    }

    public static void main(String[] args) {
        Father sample=new Son();
        System.out.println("调用的成员:"+sample.name);
        sample.method();
    }
}

输出:
调用的成员:父亲属性
子类方法,对象类型:class test1.Son

example4:

package test2;

public class Father {

    protected String name="父亲属性";
    public String getName(){
        return name;
    }

    public void method(){
        System.out.println("父类方法,对象类型:"+this.getClass());
    }

}
package test2;

/**
 * 如果试图调用子类的成员变量name,该怎么做?
 * 将该成员变量封装成方法getter形式
 * @author Administrator
 *
 */
public class Son extends Father{

    protected String name="儿子属性";

    public String getName(){
        return name;
    }

    public void method(){
        System.out.println("子类方法,对象类型:"+this.getClass());
    }

    public static void main(String[] args) {
        Father sample=new Son();//向上转型
        System.out.println("调用的成员:"+sample.getName());
    }

}

输出:
调用的成员:儿子属性