假设我有一个名为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

09-11 19:14