编译时间`this` keyword

时间:2015-09-23 13:02:14

标签: java inheritance polymorphism overloading

我从类中调用某个类(c.doSomething)的重载方法,并且我将类实例作为参数传递。使用以下方案可以更好地解释:

public class A {

    protected int do(){
        C.doSomething(this);
    }
}
public class B extends A {

    public int doSomething(){
        do();
    }
}
public class C{
    public static function doSomething(B b){ System.out.println("b"); }
    public static function doSomething(A a){ System.out.println("a"); }

}

现在,如果我在main中执行以下操作,将doSomething调用哪个C方法?

B b = new B();
b.doSomething();

1 个答案:

答案 0 :(得分:0)

这被称为“编译时多态”,因为C.doSomething(A a)被调用,我们在C.doSomething内调用A。有趣的是,在调用getClass()时,将A.do置于"B"内会产生b.doSomething