在 Java 中,**动态绑定(Dynamic Binding / Late Binding)**指的是:
在程序运行时,根据对象的实际类型来决定调用哪个方法,而不是根据引用变量的类型。
动态绑定是 Java 多态的基础。
class Animal {
void sound() {
System.out.println("Animal sound");
}
}
class Dog extends Animal {
void sound() {
System.out.println("Dog bark");
}
}
class Cat extends Animal {
void sound() {
System.out.println("Cat meow");
}
}
Animal a = new Dog();
a.sound(); // 输出:Dog bark
✅ 作用:
新增子类时,不需要修改调用方代码。
Animal a = new Cat();
a.sound(); // 不需要改原有代码
✅ 符合 开闭原则(对扩展开放,对修改关闭)
调用者只依赖父类或接口,不依赖具体子类。
void play(Animal a) {
a.sound();
}
✅ 可以传入任何 Animal 子类
✅ 调用代码更稳定
interface USB {
void work();
}
class Mouse implements USB {
public void work() {
System.out.println("Mouse working");
}
}
USB u = new Mouse();
u.work();
✅ 接口 + 动态绑定 = 高度可插拔系统
if-else没有多态时:
if (obj instanceof Dog) {
...
} else if (obj instanceof Cat) {
...
}
有动态绑定后:
obj.sound();
✅ 代码更简洁、易维护
✅ 必须满足:
static、private、final)❌ 以下情况使用静态绑定(编译期确定):
static 方法private 方法final 方法class A {
int x = 1;
}
class B extends A {
int x = 2;
}
A a = new B();
System.out.println(a.x); // 输出 1(不是动态绑定)
Java 动态绑定的作用,是让程序在运行时根据对象真实类型调用方法,从而实现多态、提高扩展性、降低耦合、简化代码。
如果你愿意,我也可以从 JVM 层面(虚方法表) 或 面试题角度再给你讲一遍。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。