Tsc*_*cka 3 java inheritance overloading
我有两个java类.
class A {}
class B extends A {}
Run Code Online (Sandbox Code Playgroud)
我有接受这些类的类,但需要不同的实现方法.
class Holder {
public void accept(A a) {} // choice 1
public void accept(B b) {} //choice 2
}
Run Code Online (Sandbox Code Playgroud)
如果我提供一个B对象的持有者,它会选择哪种方法?
看看代码我会选择2,但是由于继承,选择1也可以接受.
那么谁能告诉我这个运行时逻辑呢?
在所有情况下,都会调用最具体的方法.
如果传递的对象的类型是B,则将B调用该方法,但如果将B实例分配给类型的变量,则将调用A该A方法:
A obj = new B();
accept(obj); // will invoke the A method
Run Code Online (Sandbox Code Playgroud)
对象的运行时类型不用于绑定到方法,因为Java是静态类型语言,方法绑定是在编译时完成的.
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |