• ベストアンサー

親の親のメソッドを呼ぶには?

最近VC++をはじめていじって、 思った疑問です。 class A class B extends A class C extends C 各クラスはメソッドaaa()を持ってたとします。 Aのaaa()はsysout("A.aaa") Bのaaa()はsysout("B.aaa") (sysout = System.out.println) ってなっている場合 CのaaaでAのような振る舞いを見せることは可能なんでしょうか。 C++だと親子関係をすっとばして親の親(おじいちゃん?)のメソッドを呼べるようです。 javaだとsuper.aaa()みたいな書き方しかできないと おもうのですが、 親の親のメソッドを呼ぶってできるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • osumitan
  • ベストアンサー率33% (102/307)
回答No.3

Javaではsuperにsuperを重ねることはできません。 親のクラスがおじいちゃんのクラスのメソッドを オーバーライドしていないのであれば、 もちろんsuper.xxx();で呼べるでしょうが、 親のクラスがおじいちゃんのクラスのメソッドを オーバーライドしているということは、 おじいちゃんのクラスのメソッドではなく、 自分のクラスのメソッドを使ってほしい、 ということであると思います。 おじいちゃんのクラスのメソッドを呼べるとしたら、 親のクラスのメソッドの中で、super.xxx();を 呼んでいるなら、間接的に呼べるのでしょうけど。 つまり、おじいちゃんのメソッドを呼ぶということは 親のクラスの意向に従っていないことになるわけで、 必要ならおじいちゃんを継承するべきです。

chi-kon
質問者

お礼

>親のクラスの意向に従っていないことになるわけで、 なんかここ文章で納得してしまいました。 ありがとうございます。

その他の回答 (3)

  • kakusuke
  • ベストアンサー率36% (95/259)
回答No.4

staticメソッドなら、 キャストして呼べませんか?

chi-kon
質問者

お礼

クラスメソッドだったら。。。 という問題なので。 ありがとうございます!

  • syakko
  • ベストアンサー率25% (6/24)
回答No.2

適当な回答ばかりですみませんが、 継承関係を変更することは不可能ですか?C extends Aとか。 または、Aを直接呼び出すことがないのであればinterfaceにしちゃうとか。

chi-kon
質問者

お礼

ありがとうございます。 特に実務で必要になったわけじゃなくて、 おやをすっとばしておじいちゃんを 呼べるかどうかを知りたかったのです。 実務で必要になれば、 アドバイスいただいたような方向で 解決しなくてはいけないかもしれませんね!

  • syakko
  • ベストアンサー率25% (6/24)
回答No.1

やったことないのでわかりませんが・・・ super.super.aaa() ってやっぱできないでしょうか?

chi-kon
質問者

お礼

早速の回答ありがとうございます。 やってみちゃいましたが、 コンパイルエラーになるようです。 eclipseでやってみたんですけど、 なんかもんくいってました!あやつ。

関連するQ&A