- PR -

変数の継承について

投稿者投稿内容
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-07-16 09:04
>ちなみに皆さんはこの継承の仕様にはまってないんですかね?

protected SomeType variable;

なんてのは、親クラスと子クラスの関係がよほど深いか、
親クラスがかなり内部的にしか使わないようなものでない限り使わないので、
はまらないような気が。

親クラスであろうと、アクセサメソッドを経由したほうが結合が緩くなりますし、
変なこともされにくいし。
object
ぬし
会議室デビュー日: 2002/03/20
投稿数: 338
お住まい・勤務地: 香川県高松市
投稿日時: 2002-07-16 17:38
引用:

悪夢を統べるものさんの書き込み (2002-07-15 17:55) より:
とりあえず「メソッドテーブルを使う/使わない」ってのは
実装依存です.そのようなテーブルを使わず,毎回メソッド
ディスクリプタから動的に呼び出すような実装を取っても,
JavaVM仕様書を満たしていれば,それは正しいJavaVMです.


でも、多態はメソッドテーブルで実現されているのでは?

引用:

悪夢を統べるものさんの書き込み (2002-07-15 17:55) より:
ただし,実際問題としては結構な率でメソッドテーブルは
使ってるでしょう.とはいえ,ボトルネック部分を
直接インライン展開してメソッドテーブルを介さない形
にする最適化も広く使われてると思います.


インライン展開するのは、もちろんスピードの関係ですよね。
実際に多態を実現する必要のないメソッドは、インラインでも良いと私も思います。


引用:

t-wataさんの書き込み (2002-07-15 19:32) より:
--(以下抜粋)
参考-メソッドをオーバーライドしてスーパークラスのメソッドを隠すように、変数についてもオーバーライドして、スーパークラスの変数を隠すことができます。
------


どういう文面でこの文章が出て来ているのか、不明ですが、メソッドをオーバーライドする主目的が、メソッドを隠す事である様な表現はおかしいですね。
また、それと同じレベルで、変数(フィールド)のオーバーライドを述べるのは、誤解を招くと思います。(ただ単に、変数もオーバーライド出来ますよという意味なら、良いんですが)

メソッドをオーバーライドするのは、継承に於いて多態を実現する自然な処理だと思います。
でも、変数(フィールド)をオーバーライドするのは、異常な状態ではないでしょうか?(場合によっては必要なんでしょうけど…)
フィールドを再利用する、それが本来の継承の目的だと、私は思うからです。
みやも
ベテラン
会議室デビュー日: 2002/04/22
投稿数: 74
投稿日時: 2002-07-20 16:27
引用:

>ちなみに皆さんはこの継承の仕様にはまってないんですかね?



フィールドへの参照は、コンパイル時に参照の型で決まると心に刻んでます。
(メソッドは実行時)

はまりやすいので、フィールドの継承?(隠蔽?shadow?)
は極力使わないようにしてます。
どうしても使う場合は、しょむさんの言うように、
アクセサメソッドを使ってアクセスするか、
明確にsuper.〜のように参照します。

スキルアップ/キャリアアップ(JOB@IT)