Java 将超级变量强制转换为类类型

Java 将超级变量强制转换为类类型,java,Java,我有以下代码: class a { void show() { System.out.println("in a"); } } class b extends a { void show() { System.out.println("in b"); } } class c extends b { void show() { // can i do here ((a)super).show

我有以下代码:

class a {
    void show() {
        System.out.println("in a");
    }
}

class b extends a {
    void show() {
        System.out.println("in b");
    }
}

class c extends b {
    void show() {
        // can i do here
        ((a)super).show();
    }
}
如果我们可以将超变量强制转换为超类类型,请更新

b。为什么变量不显示重写方法所显示的多态现象

c。我读到
super.super.methodname()
无法删除以避免违反封装。有人能解释一下这是怎么回事吗

谢谢

b。为什么变量不显示重写方法所显示的多态现象

因为字段变量在java中不是polymorphic的

c。我读到super.super.methodname()不起作用是为了避免违反封装。有人能解释一下这是怎么回事吗


首先,super不是一个变量。这是一个关键字。可能是的重复项,但我想知道这是如何违反封装的。请对此进行更新。@用户Jon Skeet在那篇文章中给出了非常好的解释,总结了它,您不应该被允许直接控制super的super,绕过它super可以强制转换到任何类typesuper引用父类型,例如,在Animal和Human的super中,人类的super将引用Animal,所以您可以将super转换为任何有效的引用,它可以指向我们无法将super转换为类a的原因。是java不允许从孙子类调用祖父母类方法吗