我有两个java类。
class A {}
class B extends A {}
我有接受这些类的类,但需要不同的实现方法。
class Holder {
public void accept(A a) {} // choice 1
public void accept(B b) {} //choice 2
}
如果我提供一个B对象的持有者,它会选择哪种方法?
查看代码我会选择2,但是由于继承,选择1也可以接受。
那么谁能告诉我这个运行时逻辑?
答案 0 :(得分:6)
在所有情况下,都会调用最具体的方法。
如果传递的对象的类型是B
,那么将调用B
方法,但是如果将B
实例分配给类型为A
的变量,将调用A
方法:
A obj = new B();
accept(obj); // will invoke the A method
对象的运行时类型不用于绑定到方法,因为Java是静态类型的语言,方法绑定是在编译时完成的。