2016-06-22 7 views
-4

クラスXがYを拡張し、Y.methodFromClassX()を使用してメソッドを呼び出すと、クラスXの関数を使用できますか?私は何かを試しましたが、動作させることができませんでした。この仕事をするための私の選択肢は何ですか?別のクラスを継承するクラスの関数を使用する

編集:この形式の書式は間違いです。私は、いくつかの簡単な提案のように、 'Y'を拡張したクラスを格納し、それぞれの関数を使用する効率的な方法があるかどうかを知りたかったのです。しかし、少し考えた後、私は必要なことをするために別のテクニックを使うことに決めました。しかし、助けてくれてありがとう!

+2

あなたのコードとあなたが得ている正確なエラーを共有してください – Mureinik

+0

ありません –

答えて

0

それはYのインスタンスでクラスXで定義されたメソッドを呼び出すことはできません(これは最初の場所で関係を拡張したの目的を台無しにしてしまいます!)

XのインスタンスでクラスYで定義されたメソッドを呼び出すことは可能です。したがって、XとYの両方のインスタンスで特定のメソッドを呼び出す必要がある場合は、そのメソッドをYで定義する必要があります。 XがY拡張する場合の関係は、その後も、あなたが要約

Xのインスタンス上でそのメソッドを呼び出すことができます拡張:Yの

  • インスタンスがYで定義されたメソッドへのアクセス権を持っているが、しかしXの

  • インスタンスはY

に定義されたX 方法で定義されたメソッドへのアクセスを有するXで定義されていない方法

あなたのケースでは、XとYの両方のインスタンスにアクセスできるメソッドが必要なようであるため、呼び出すメソッドの定義をクラスXからクラスYに移動する必要があります。その方法では、XとYの両方のインスタンスがメソッドにアクセスできます。

+0

ありがとう。しかし、私はこのためにクラス拡張を作った: 私は複数のクラス(これは特定のファイルタイプを扱う)のためのベースを持つ必要があります。したがって、基本的な機能を持つ抽象クラスを作成し、各ファイルのハンドラを拡張することを考えました。次に、各ハンドラで、そのファイルに固有の関数を作成します。たぶんそれらを静的にしてTheClass.theFunction();を使用して呼び出すことができますが、私の直感は私には分かりません。 – Sneling

0

はい、これは可能ですが、関数は子クラスから表示する必要があります。小さなデモンストレーション。

public class X { 
    protected String sayHi() { 
     return "Hi there from X"; 
    } 
} 

public class Y extends X { 
    public void printMessage() { 
     System.out.println(sayHi()); 
    } 
} 
+0

私はあなたがそれを後方に持っていると思います。 'XはYを伸ばします。あなたの例では、 'X'型のリファレンスで' printMessage() 'を呼び出すことはできません。 –

+0

これは、スーパークラスから子に実装されている関数を呼び出すことを意味しますか?あなたはそれを明示的に行うことはできませんが、解決策はMinjun.Yの答えで与えられます。 ところで、あなたの質問ははっきりと書かれておらず、あなたが試したことの例はありません。 – gkaran89

+0

これはOPのコメントです。私はOPではない。 –

0

でも良いことではありません。この投稿は、非常によく説明:XがYを拡張する場合
call-a-child-class-method-from-a-parent-class-object

+0

私はあなたが疑問を誤解していると信じています。 OPは、継承の意図された動作である子クラスからスーパークラスメソッドを呼び出すことを望んでいます。 –

+1

私はあなたに正直に同意しません。 * XはY *を拡張しているため、Yは親です。 OPは* Y.methodFromClassX()*を使って親Yから* methodFromClassX *を呼び出すことを望んでいます。継承の意図された動作は、正反対です。 –

+0

@ Minjun.Y申し訳ありませんが、それは私のせいです。もちろん、あなたは正しいです。 –

関連する問題