在 Java 中,绑定(Binding)指的是方法调用与方法实现之间的关联过程。根据绑定发生的时间,可分为静态绑定(早绑定)和动态绑定(晚绑定)。
定义:在编译期就确定调用哪个方法。
class A {
static void show() {
System.out.println("A");
}
}
class B extends A {
static void show() {
System.out.println("B");
}
}
A a = new B();
a.show(); // 输出 A(静态绑定,看引用类型)
定义:在运行期根据对象的实际类型确定调用哪个方法。
class A {
void show() {
System.out.println("A");
}
}
class B extends A {
void show() {
System.out.println("B");
}
}
A a = new B();
a.show(); // 输出 B(动态绑定,看实际对象)
| 对比点 | 静态绑定 | 动态绑定 |
|---|---|---|
| 发生时间 | 编译期 | 运行期 |
| 依据 | 引用类型 | 实际对象类型 |
| 是否支持多态 | 否 | 是 |
| 性能 | 高 | 略低 |
| 常见场景 | static / final / private / 重载 | 方法重写 |
静态绑定看“类型”,动态绑定看“对象”。
如果你愿意,我也可以结合 JVM 方法调用(invokevirtual / invokestatic)来讲得更底层一些。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。