Java 我可以从super的super调用重写的方法吗?

Java 我可以从super的super调用重写的方法吗?,java,inheritance,polymorphism,dynamic-binding,Java,Inheritance,Polymorphism,Dynamic Binding,假设我有以下三个类: 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

假设我有以下三个类:

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();
    }
}

是否可以调用
Foo
fn()
?我知道我在
gn()
中的解决方案不起作用,因为
指向的是
Bar
类型的对象,在Java中是不可能的。您可以使用
super
,但它总是在类型层次结构的立即超类中使用方法

还请注意:

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

虚拟调用是如何工作的:尽管
f
属于
Foo
类型,但在运行时
f.fn()
被分派到
Bar.fn()
。编译时类型不重要。

这是否可以编译?当然!!问题是什么?我忽略了方法是私有的