如何强制转换运行超类方法

时间:2015-10-02 20:10:48

标签: java

有没有办法使用强制转换,以便在m1()类中运行I1方法来打印In I1 class?我不希望它运行重写方法。

class TestClass extends I1 implements I2{
       public void m1() { System.out.println("Hello"); }
       public static void main(String[] args){
          I1 tc = new TestClass();
          tc.m1();
       }
    }
    class I1{
       int VALUE = 1;
       public void m1(){System.out.println("In I1 class");}
    }
    interface I2{
       int VALUE = 2;
       void m1();
    }

2 个答案:

答案 0 :(得分:2)

不,你不能这样做。多态性的部分原因是能够隐藏层次结构中较低级别的实现细节。您可以调用超类方法,但仅作为重写方法内的调用。

这样想。也许TestClass在方法m1内做了一些重要的事情,它保持其内部状态并保持一致。也许它跟踪在超类中完成的事情,并维护自己的缓存,或复制或类似。如果你可以让它调用超类方法,那么代码就不会运行,你就会严重破坏TestClass

您评论中的建议

的原因
((I1)tc).m1();

不起作用是您已更改正式类型,而不是实际类型。在运行时调用重写方法基于实际类型,因此JVM仍会注意到它是TestClass类型,并调用重写方法。

答案 1 :(得分:0)

您首先声明了I1 tc = new TestClass(),所以即使您((I1)tc).m1()tc仍然指向TestClass()的对象。这就是为什么它不起作用。

如果您想从m1()课程致电I1,请改为I1 tc = new I1();

相关问题