- ベストアンサー
親の親のメソッドを呼ぶには?
最近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()みたいな書き方しかできないと おもうのですが、 親の親のメソッドを呼ぶってできるのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Javaではsuperにsuperを重ねることはできません。 親のクラスがおじいちゃんのクラスのメソッドを オーバーライドしていないのであれば、 もちろんsuper.xxx();で呼べるでしょうが、 親のクラスがおじいちゃんのクラスのメソッドを オーバーライドしているということは、 おじいちゃんのクラスのメソッドではなく、 自分のクラスのメソッドを使ってほしい、 ということであると思います。 おじいちゃんのクラスのメソッドを呼べるとしたら、 親のクラスのメソッドの中で、super.xxx();を 呼んでいるなら、間接的に呼べるのでしょうけど。 つまり、おじいちゃんのメソッドを呼ぶということは 親のクラスの意向に従っていないことになるわけで、 必要ならおじいちゃんを継承するべきです。
その他の回答 (3)
- kakusuke
- ベストアンサー率36% (95/259)
staticメソッドなら、 キャストして呼べませんか?
お礼
クラスメソッドだったら。。。 という問題なので。 ありがとうございます!
- syakko
- ベストアンサー率25% (6/24)
適当な回答ばかりですみませんが、 継承関係を変更することは不可能ですか?C extends Aとか。 または、Aを直接呼び出すことがないのであればinterfaceにしちゃうとか。
お礼
ありがとうございます。 特に実務で必要になったわけじゃなくて、 おやをすっとばしておじいちゃんを 呼べるかどうかを知りたかったのです。 実務で必要になれば、 アドバイスいただいたような方向で 解決しなくてはいけないかもしれませんね!
- syakko
- ベストアンサー率25% (6/24)
やったことないのでわかりませんが・・・ super.super.aaa() ってやっぱできないでしょうか?
お礼
早速の回答ありがとうございます。 やってみちゃいましたが、 コンパイルエラーになるようです。 eclipseでやってみたんですけど、 なんかもんくいってました!あやつ。
お礼
>親のクラスの意向に従っていないことになるわけで、 なんかここ文章で納得してしまいました。 ありがとうございます。