2016-10-12 14 views
1

親クラスと子クラスがあります。子クラス親オーバーライドメソッド(show)を呼び出しています。親クラスです。別のメソッド(display)を呼び出していますが、そのメソッドもオーバーライドされていますChildメソッドが呼び出されます。 showメソッドから親メソッドを表示したいと思います。親のオーバーライドされたメソッドを呼び出す方法

public class Parent { 


    public void show() 
    { 
     System.out.println("Show of parent "); 
     this.display(); 
    } 

    public void display() 
    { 
     System.out.println("Display of parent"); 
    } 

} 

public class Child extends Parent{ 

    public void show() 
    { 
     System.out.println("Show of child "); 
     super.show(); 
    } 

    public void display() 
    { 
     System.out.println("Display of child"); 
    } 

    public static void main(String[] args) { 
     Parent obj = new Child(); 
     obj.show(); 
    } 


} 

出力:

Show of child 
Show of parent 
Display of child 

必要があります。

Show of child 
Show of parent 
Display of parent 

つまり私は、同じクラスのshow()方法

+0

あなたはショーではしましたが、ディスプレイではありません...なぜですか?ディスプレイからsuper.display()を呼び出します。 – AxelH

+0

@AxelH同じクラスのshow()メソッドから親クラスのdisplay()メソッドを呼びたい – Kick

答えて

2

いただきましたが間違ってから親クラスのdisplay()メソッドをコールします:

public void show() 
{ 
    System.out.println("Show of child "); 
    super.show(); 
    super.display(); 
} 

そしてレコードの:あなたは本当に、本当に、本当にそれぞれ、あなたがオーバーライド何かを考えて任意の方法で@Overrideを載せていきたいと思います。 と仮定して実際には何もしないでオーバーライドすることがよくあります。 @Overrideは、このような間違いをしたときにコンパイラに指示するよう指示します。

EDIT:注意してください - 特定の状況では、show +表示を「一緒に」呼び出すと思われます。その場合:メソッドを2つではなく「インタフェース」に入れてください。私が意味することは、それらの方法のアイデアが次々に実行されることであるなら、それを行うための意味のある方法を提供することです。

他の言葉では:良いインターフェイスは簡単に行うことができますもの; が間違ってことをするのは難しいです。そこには2つのメソッドがあり、他のコードがそれらを順番に呼び出すことを期待することは、その考え方の反対を実現します。物事を間違ってしまうのは簡単です。正しいことを得るのが難しいです!

最終的には、既に命名は、特定の設計上の問題が残っていることを指摘しています。次のように、最初は「表示」と「表示」の違いは何ですか?

+0

同じクラスのshowメソッドから親クラスの表示メソッドを呼び出したいと思います。 – Kick

+0

Tx。しかし、私は同じクラスのshowメソッドからのみ呼び出される親の表示メソッドを望む – Kick

+0

私は認めなければならない:私はあなたの問題を取得しないでください。私のコード例では、探していた出力を作成する必要があります。 – GhostCat

関連する問題