将方法调用连接到方法体称为绑定。也就是通过调用方法连接到具体的方法体。
Java两种绑定模式
首先了解一下变量和类型
每个基本变量都会有个类型
int a =1;double b = 1;
这里变量a的类型是int,b的变量是double类型
每一个变量也会有一个类型
class Dog {
public static void main(String args[]) {
Dog d1;// Here d1 is a type of Dog
}
}
d1 的类型是Dog
当方法当编译时(由编译器)确定对象的类型时,它被称为静态绑定。如果在类中有任何private,final或static方法,则有静态绑定。
静态绑定
能由编译器确定对象的类型时,它被称为静态绑定。如果在类中有任何private,final或static方法,则有静态绑定,因为他们都不能被重写。不存在多态。
class Dog {
private void eat() {
System.out.println("dog is eating...");
}
public static void main(String args[]) {
Dog d1 = new Dog();
d1.eat();
}
}
动态绑定
当在运行时确定对象的类型时,它被称为动态绑定。存在多态。
class Animal {
void eat() {
System.out.println("animal is eating...");
}
}
class Dog extends Animal {
void eat() {
System.out.println("dog is eating...");
}
public static void main(String args[]) {
Animal a = new Dog();
a.eat();
}
}
dog is eating...
这个由虚拟机运行时,动态选择执行的方法称为动态绑定。而编译器不能决定。