2016-07-28 10 views
2

Ich habe eine Klasse C1:Anruf Mutter Methode anstelle der außer Kraft gesetzt ein

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 
      */ 
     } 
    } 

} 

und eine andere Klasse C2 dass extends es und overrides die method:

public class C2 extends C1 { 

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

} 

Mein Problem im Code beschrieben wird Kommentar. Ich kann die Elternmethode in der Elternklasse nicht ausführen. Was ist der Grund?

+0

Ich befolge Ihre Frage nicht vollständig, aber wenn Sie 'C1.method()' aufrufen wollen, sollten Sie 'super' verwenden. In der Tat, du machst das schon in der 'else'-Bedingung. –

+1

Plus eins, mit der Begründung, dass Sie * dies in C++ tun können, also was Sie fragen, ist logisch. – Bathsheba

+0

@TimBiegeleisen sein Problem ist die Tatsache, dass er glaubt, dass die Tatsache, dass er die Methode außer Kraft setzt, unmöglich ist, von C1 anzurufen. Kann nicht reproduziert werden. Könnten Sie uns bitte [mcve] liefern? Geben Sie uns mehr Code und zeigen Sie, wo Ihr Problem liegt. – xenteros

Antwort

2

Ärgerlich, Sie können nicht (reflektierende Hacks beiseite legen).

Aber man etwas auf den Linien

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

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

und außer Kraft setzen method in der abgeleiteten Klasse tun könnte. Wenn Sie speziell die Basisklassenmethode benötigen, rufen Sie . Ich denke, das ist das nächste Schreiben C1::method(), das in C++ zulässig ist.

+0

Danke, ich werde es tun. –

0

Soweit Ihre C2 Klasse betroffen ist die anotherMethod() nicht außer Kraft gesetzt, damit es seine eigenen nennt method() wenn something wahr ist.

außer Kraft setzt es wie folgt:

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

die übergeordnete Methode von anotherMethod() Definition des Kindes zu nennen.