プロが教える店舗&オフィスのセキュリティ対策術

最近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()みたいな書き方しかできないと
おもうのですが、
親の親のメソッドを呼ぶってできるのでしょうか?

A 回答 (4件)

Javaではsuperにsuperを重ねることはできません。


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

>親のクラスの意向に従っていないことになるわけで、

なんかここ文章で納得してしまいました。
ありがとうございます。

お礼日時:2005/02/25 01:10

staticメソッドなら、


キャストして呼べませんか?
    • good
    • 0
この回答へのお礼

クラスメソッドだったら。。。
という問題なので。

ありがとうございます!

お礼日時:2005/02/25 01:12

適当な回答ばかりですみませんが、


継承関係を変更することは不可能ですか?C extends Aとか。
または、Aを直接呼び出すことがないのであればinterfaceにしちゃうとか。
    • good
    • 0
この回答へのお礼

ありがとうございます。

特に実務で必要になったわけじゃなくて、
おやをすっとばしておじいちゃんを
呼べるかどうかを知りたかったのです。

実務で必要になれば、
アドバイスいただいたような方向で
解決しなくてはいけないかもしれませんね!

お礼日時:2005/02/25 01:09

やったことないのでわかりませんが・・・


super.super.aaa()
ってやっぱできないでしょうか?
    • good
    • 0
この回答へのお礼

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

やってみちゃいましたが、
コンパイルエラーになるようです。

eclipseでやってみたんですけど、
なんかもんくいってました!あやつ。

お礼日時:2005/02/19 23:20

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