Java 调用父方法而不是重写的方法

Java 调用父方法而不是重写的方法,java,overriding,Java,Overriding,我有一门课C1: public class C1 { public void method() { //Do something } protected void anotherMethod() { if (something) { method(); /*Here, I want to call the method C1.method, * but C2.method is

我有一门课
C1

public class C1 {

    public void method() {
      //Do something
    }

    protected void anotherMethod() {
      if (something) {
          method(); 
          /*Here, I want to call the method C1.method, 
           * but C2.method is called
           */
      }
    }

}
和另一类
C2
,该类
扩展
它并
覆盖
方法

public class C2 extends C1 {

    @Override
    public void method() {
        if (something) {
            anotherMethod();
        } else {
            super.method();
        }
    }

}

代码注释中描述了我的问题。我无法在父类中运行父方法。原因是什么?

就您的
C2
类而言,
anotherMethod()
没有被重写,因此如果
某个东西是真的,它会调用自己的
方法()

按如下方式覆盖它:

@Override
protected void anotherMethod() {
  if (something) {
      super.method(); //Here, I want to call the method `C1.method`, but `C2.method` is called
  }
}
要从子对象的
anotherMethod()
定义中调用父方法。

令人恼火的是,您不能(将反射hack放在一边)

但你可以在网上做点什么

public class C1 {
    public final void _method() /*rename to taste*/{
    }

    public void method(){
        _method();
    }
}

并重写派生类中的
方法
。如果特别需要基类方法,则调用
\u method()
。我认为这是最接近写代码的代码> C1::方法()/<代码> C++中允许的。

我不完全遵循你的问题,但是如果你想调用<代码> C1.方法()/<代码>,那么你应该使用<代码>超级< />代码。事实上,你已经在 EX/<代码>条件下做了。另外一个,你可以在C++中这样做,所以你要问的是逻辑。@ TimiGeEleSein他的问题是事实,他相信他超越方法的事实使得从C1调用是不可能的。无法复制。你能提供给我们吗?给我们更多的代码,并显示您的问题所在。谢谢,我会这样做。