假设我有一个名为A
的类。我还有另一个扩展A
的类,称为B
。B
包含一个BsMethod()
所不包含的方法。
假设我声明了一个A
数组:A
我分配arrA = new A[10]
我尝试通过执行arrA[1] = new B();
来调用BsMethod
这给出一个错误,指出arrA[1].BsMethod()
不包含此方法。我应该更改什么才能使用arrA
呼叫BsMethod
?
最佳答案
之所以失败,是因为在编译时,Java编译器无法将方法与class A
对象绑定,因此无法在BsMethod()
中找到方法class A
。
您可以将对象转换为class B
并使用它。
((B)arrA[1]).BsMethod();
在动态绑定中,实际的方法调用是在运行时确定的。因此,如果您在超类中有一个方法,并且还在子类中重写了它。然后,在运行时确定该方法的实际方法调用。
您可以在此处通过示例阅读有关静态和动态绑定的更多信息。
Static Binding and Dynamic Binding