假设我有一个名为A
的类。我有另一个扩展名为A
的{{1}}的类。
B
包含一个名为B
且BsMethod()
不包含的方法。
假设我声明了一个A
:A
我指定arrA = new A[10]
我尝试通过arrA[1] = new B();
BsMethod
这会给出一个错误,指出arrA[1].BsMethod()
不包含此方法。我应该更改哪些内容,以便我可以使用arrA
来呼叫BsMethod
?
答案 0 :(得分:2)
这是失败的,因为在编译java编译器无法将方法与class A
对象绑定,它无法在BsMethod()
中找到方法class A
。
您可以将对象强制转换为class B
并使用它。
((B)arrA[1]).BsMethod();
在动态绑定中,实际方法调用在运行时确定。因此,如果您在超类中有一个方法,并且您也在子类中覆盖它。然后,在运行时确定用于这种方法的实际方法调用。
您可以通过示例阅读有关静态和动态绑定的更多信息。 Static Binding and Dynamic Binding
答案 1 :(得分:1)
您必须将arrA[1]
强制转换为B
,因为arrA
是A
的数组,此时编译器不知道B
。
这样称呼:((B)arrA[1]).BsMethod()