3

假设我有这三个类:

class Foo {
    void fn() {
        System.out.println("fn in Foo");
    }
}

class Mid extends Foo {
    void fn() {
        System.out.println("fn in Mid");
    }
}

class Bar extends Mid {
    void fn() {
        System.out.println("fn in Bar");
    }

    void gn() {
        Foo f = (Foo) this;
        f.fn();
    }
}

public class Trial {
    public static void main(String[] args) throws Exception {
        Bar b = new Bar();
        b.gn();
    }
}

可以叫aFoofn()?我知道我的解决方案gn()不起作用,因为this它指向 type 的对象Bar

4

1 回答 1

5

这在 Java 中是不可能的。您可以使用super,但它始终使用类型层次结构中直接超类中的方法。

另请注意:

Foo f = (Foo) this;
f.fn();

是多态性的定义,虚拟调用是如何工作的:即使f是 type Foo,但在运行时f.fn()被调度到Bar.fn(). 编译时类型无关紧要。

于 2011-11-26T19:48:23.833 回答