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调用是不可能的。无法复制。你能提供给我们吗?给我们更多的代码,并显示您的问题所在。谢谢,我会这样做。