静态绑定和动态绑定
Java中的静态绑定与动态绑定:
在 Java 中,绑定指的是将方法调用与实际的方法实现进行关联的过程。绑定有两种主要形式:静态绑定(也称为早期绑定或编译期绑定)和动态绑定(也称为晚期绑定或运行期绑定)。
静态绑定:
静态绑定通常发生在编译阶段。当方法调用的位置是在编译时期就已经确定时,就发生了静态绑定。静态绑定的例子包括静态方法、私有方法、构造器以及最终方法等。
代码示例如下:
package oneHundredDayPlan.fourDay;//静态绑定代码示例
public class One {public static void main(String[] args) {System.out.println(add(5, 10));//静态方法}public static int add(int a, int b) {return a + b;}
}
动态绑定:
与静态绑定不同,动态绑定通常发生在运行时。当方法调用的位置是在运行时期才能确定时,就发生了动态绑定。动态绑定主要与继承和多态有关,即当通过父类引用调用子类的方法时。
代码示例如下:
package oneHundredDayPlan.fourDay;
//动态绑定代码示例class Animal {public void dynamicBinding() {System.out.println("dynamic binding");}
}class Dog extends Animal {@Overridepublic void dynamicBinding() {System.out.println("dynamic");}
}class Cat extends Animal {@Overridepublic void dynamicBinding() {System.out.println("binding");}
}public class Two {public static void main(String[] args) {Animal a = new Dog();a.dynamicBinding();//dynamicAnimal b = new Cat();b.dynamicBinding();//binding}
}
在这个例子中,dynamicBinding()方法是通过Animal引用来调用的,但实际上调用哪个类的方法取决于运行时创建的对象是什么,这就是动态绑定的一个例子。
总结:
静态绑定:
在编译时期就能确定方法调用的目标。例如:静态方法、构造函数、最终方法等。
动态绑定:
在运行时才能确定方法调用的目标,这是通过继承和多态来实现的。
通过以上示例可以看到静态绑定和动态绑定的区别在于方法的选择是在编译时期还是运行时期决定的。静态绑定通常涉及到固定的方法调用,而动态绑定涉及到多态的行为。