关于Java中的静态和动态绑定

请解释Java中静态和动态绑定的概念。

我所掌握的是Java中的静态绑定发生在编译期间,而动态绑定发生在运行时,静态绑定使用Type(Java中的Class)信息进行绑定,而动态绑定使用Object来解析绑定。

这是我理解的代码。

public class StaticBindingTest { public static void main (String args[]) { Collection c = new HashSet (); StaticBindingTest et = new StaticBindingTest(); et.sort (c); } //overloaded method takes Collection argument public Collection sort(Collection c) { System.out.println ("Inside Collection sort method"); return c; } //another overloaded method which takes HashSet argument which is sub class public Collection sort (HashSet hs){ System.out.println ("Inside HashSet sort method"); return hs; } } 

并且上述程序的输出在集合排序方法中

用于动态绑定…

  public class DynamicBindingTest { public static void main(String args[]) { Vehicle vehicle = new Car(); //here Type is vehicle but object will be Car vehicle.start(); //Car's start called because start() is overridden method } } class Vehicle { public void start() { System.out.println("Inside start method of Vehicle"); } } class Car extends Vehicle { @Override public void start() { System.out.println ("Inside start method of Car"); } } 

输出在Car的start方法内。 请告知:这种理解是否正确,请告知更多示例。 谢谢。

静态绑定在编译时使用,通常与重载方法相同 – 示例中的sort()方法,其中在编译时使用参数的类型来解析方法。

动态绑定( 动态分派 )通常与多态和覆盖方法相关联 – 示例中的start()方法,其中在运行时使用接收器 (车辆)的类型来解析方法。

我认为你已经正确地总结了它,并且shams也正确地为你添加了更多的信息。 为了向您添加更多信息,首先让我退一步说明方法定义与方法调用的关联称为绑定。 因此,正确指出的静态绑定是编译器在编译时可以解析的绑定(也称为早期绑定或静态绑定)。 另一方面,动态出价或后期绑定意味着编译器无法在编译时解析调用/绑定(它发生在运行时)。 请参阅下面的一些示例:

 //static binding example class Human{ .... } class Boy extends Human{ public void walk(){ System.out.println("Boy walks"); } public static void main( String args[]) { Boy obj1 = new Boy(); obj1.walk(); } } //Overriding is a perfect example of Dynamic binding package beginnersbook.com; class Human{ public void walk() { System.out.println("Human walks"); } } class Boy extends Human{ public void walk(){ System.out.println("Boy walks"); } public static void main( String args[]) { //Reference is of parent class Human myobj = new Boy(); myobj.walk(); } } 

资源