橘子味的心
标题:Java静态绑定和动态绑定

将方法调用连接到方法体称为绑定。

在java中有两种类型的绑定:

  • 静态绑定(也称为早期绑定)。
  • 动态绑定(也称为后期绑定)。

了解类型

下面让我们来了解实例的类型。

1. 变量有一个类型

每个变量都有一个类型,它可能是原始的和非原始的。

  1. int data=30;
  2. Java

这里的数据变量是一个int类型。

2. 引用有一个类型

  1. class Dog {
  2. public static void main(String args[]) {
  3. Dog d1;// Here d1 is a type of Dog
  4. }
  5. }
  6. Java

2. 对象有一个类型

对象是特定的java类的实例,但它也是其超类的实例。

  1. class Animal {
  2. }
  3.  
  4. class Dog extends Animal {
  5. public static void main(String args[]) {
  6. Dog d1 = new Dog();
  7. }
  8. }
  9. Java

这里d1Dog类的一个实例,但它也是Animal的一个实例。

静态绑定

当编译时(由编译器)确定对象的类型时,它被称为静态绑定。如果在类中有任何privatefinalstatic方法,则有静态绑定。

静态绑定的示例

  1. class Dog {
  2. private void eat() {
  3. System.out.println("dog is eating...");
  4. }
  5.  
  6. public static void main(String args[]) {
  7. Dog d1 = new Dog();
  8. d1.eat();
  9. }
  10. }
  11. Java

动态绑定

当在运行时确定对象的类型时,它被称为动态绑定。

动态绑定的示例

  1. class Animal {
  2. void eat() {
  3. System.out.println("animal is eating...");
  4. }
  5. }
  6.  
  7. class Dog extends Animal {
  8. void eat() {
  9. System.out.println("dog is eating...");
  10. }
  11.  
  12. public static void main(String args[]) {
  13. Animal a = new Dog();
  14. a.eat();
  15. }
  16. }
  17. Java

执行上面示例代码输出结果如下 -

  1. dog is eating...
  2. Shell

在上面的例子中,对象类型不能由编译器决定,因为Dog的实例也是Animal的一个实例。编译器不知道它的类型,只知道它的基类型。