アプリ版:「スタンプのみでお礼する」機能のリリースについて

Javaで親クラスから子クラスを生成して、子クラスから親クラスのメソッドを呼ぶことが
できますか?

Cなら関数ポインタで呼ぶことができました。
また、C#ならデリゲートなどを使用して呼べました。

可能であれば小さいサンプルでいいので、教えていただけないでしょうか?

A 回答 (8件)

> フォームのボタンが押された場合にコントロールクラスに通知したい



Observer パターンを使うのが一般的ではないかと思います。
    • good
    • 0

>関数のポインタを渡す


staticでない関数は本体がインスタンスに依存する以上、
インスタンスの参照をしないで「関数の入口」を得ることは
できません。staticな関数は静的にアドレスが決まっている
ので、インスタンスに依拠しないで関数を呼べます。但し、
関数が所属するクラス内のstaticでない変数は当然ですが
参照できませんし、static属性の変数を変更するとスレッド
セーフではなくなります。

public class 親 {
int 定数1 = 1; //静的関数から参照できない
static int 定数2 = 2; //静的関数から参照できる
static int 静的関数() {
}
}
public class 子 {
int ある処理() {
親.静的関数(); //インスタンス化せずに呼び出せる。
}
}
    • good
    • 0

ああ、"extends A"が消されていることに気付いていませんでした。

失礼。「親クラス」「子クラス」って書かれたら、継承関係があると思ってしまうもの。

> フォームのボタンが押された場合にコントロールクラスに通知したい

そういうことをするのに、フォームクラスのインスタンスが通知先のコントロールクラスのインスタンスへの参照を持っていることはごく自然なことだと思いますが。
    • good
    • 0

> ちょっと違います。



と言われても、ANo.3の解でもB.q()からAのm()やn()を呼べているので、何がどう不満なのかを補足してほしいところです。

この回答への補足

A継承のBクラスではないということです。
すいません。具体的に書きます。
コントローラークラスがフォームクラスを生成して、フォームのボタンが押された場合にコントロールクラスに通知したいのですが、そのやり方がわかりません。
一般的にどう実現するべきなのでしょうか?

そもそも、コントロールクラスがフォームクラスを生成することがおかしいのでしょうか?

補足日時:2012/04/10 23:28
    • good
    • 0

「親」「子」をそういう意味で使ってるとは全く想像できなかった....



言語仕様上, 少なくとも現時点では「きれいな方法」はなさそう. 「クロージャー的なにか」を作るとか, リフレクションを駆使するとかの方法はあるみたいだけど, 説明は面倒なので自分で調べてください.

でも, C でどうやって実現してるんだろう. そもそも C に「メンバ関数」なんて存在しないのに.

この回答への補足

説明が下手ですいません。

ANo.5の補足のやり方を教えていただけないでしょうか?

補足日時:2012/04/10 23:31
    • good
    • 0

こういうことをしたいのでしょうか。


親クラスAのメソッドp()で子クラスBのインスタンスを生成して、Bのメソッドq()を呼びます。q()から、Aのメソッドm()とn()を呼んでいます。

class A {
void p() {
B obj = new B();
obj.q();
}

void m() { System.out.println("A.m()"); }
void n() { System.out.println("A.n()"); }
}

class B extends A {
void n() { System.out.println("B.n()"); }

void q() {
m();
super.n();
}
}

この回答への補足

ちょっと違います。

class A{
void p(){
B obj = new B();
obj.q();
}

void m() { System.out.println("A.m()"); }
void n() { System.out.println("A.n()"); }
}

class B{
void q(){
//ここでAのmやnを呼びたい。
}
}



}

補足日時:2012/04/10 22:37
    • good
    • 0

子クラスに親クラスを渡せば普通に呼び出せます。


public class 親 {
public int 親メソッド() {
・・・
}
private int 子の生成() {
  子 obj = new 子();
  int 戻り値 = obj.入口(this);
・・・
}
}
public class 子 {
int 入口(親 obj) {
・・・
  int 戻り値 = obj.親メソッド();
}
}

この回答への補足

回答ありがとうございます。

確かにこの方法だといけますが、お互いインスタンスの参照を持ちあうことになります。

これ以外で関数のポインタを渡す、アクションリスナ?を使うなどしてできないでしょうか??

すいませんが知っていましたら、ご教授ください。

補足日時:2012/04/10 16:56
    • good
    • 0

「親クラス」「子クラス」とはなんですか?

この回答への補足

No3補足のAが親クラス、Bが小クラスです。

よろしくお願いします。(><)

補足日時:2012/04/10 22:39
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!