Java 中的动态绑定:为什么子类方法有时无法被调用?
java 中的动态绑定
java 中的动态绑定是一种在运行时根据其实际类型选择正确方法的技术。这意味着对象可以执行来自其父类和实现的接口的方法,而不管其声明类型。
示例 1
此处,我们定义了 a 类和它的子类 b。我们创建了一个 b 类的对象并将其存储在 a 类型的变量 a 中。当调用 f(int) 方法时,java 虚拟机(jvm)会识别 a 实际引用的 b 类对象,并调用匹配其实际类型的 f(int) 方法(“我是子类”)。
class A { public void f(int a) { System.out.println("我是父类"); } } class B extends A { @Override public void f(int a) { System.out.println("我是子类"); } public static void main(String[] args) { A a = new B(); a.f(0); } }
示例 2
然而,在第二个示例中,b 类添加了一个 print(string) 方法,a 类没有这个方法。当我们尝试调用 a.print("0") 时,jvm 会尝试在 b 类中寻找 print 方法,但没有找到。在这种情况下,jvm 不会转到父类 a 中寻找该方法,因为 a 被声明为 a 类型,它只能访问 a 类中定义的方法。
换句话说,动态绑定仅适用于对象能够访问的方法,而引用变量的声明类型决定了其可访问的方法集。即使 a 实际引用的对象是 b 类的实例,它仍然只能调用 a 类中定义的方法。
以上就是Java 中的动态绑定:为什么子类方法有时无法被调用?的详细内容,更多请关注其它相关文章!