在Java的方法调用上,存在静态绑定和动态绑定两种类型,下面对这两种类型的区别进行了举例:
- Java中的静态绑定是发生在编译阶段,然而动态绑定是在程序运行时发生的;
- private, final, static等修饰的方法和变量都是采用静态绑定的;
- 静态绑定使用Java Class类型来获取信息的,然而动态绑定是使用当前运行时的对象来获取相关信息的;
- 重载的方法使用静态绑定,而重写的方法使用动态绑定;
动态绑定示例
package com.jiangjian.study.java.method;
public class MethodDynamicBindingTest {
public static void main(String[] args) {
Vehicle vehicle = new Car();
vehicle.start();
}
}
class Vehicle {
public void start() {
System.out.println("Inside start method of Vehicle");
}
}
class Car extends Vehicle {
public void start() {
System.out.println("Inside start method of car");
}
}
结果为: Inside start method of car
静态绑定示例
package com.jiangjian.study.java.method;
import java.util.Collection;
import java.util.HashSet;
public class MethodStaticBindingTest {
public static void main(String[] args) {
Collection c = new HashSet();
MethodStaticBindingTest et = new MethodStaticBindingTest();
et.sort(c);
}
public Collection sort(Collection c) {
System.out.println("Inside Collection sort method");
return c;
}
public Collection sort(HashSet hs) {
System.out.println("Inside HashSet sort method");
return hs;
}
}
结果为: Inside Collection sort method