dポイントプレゼントキャンペーン実施中!

ある所で下記のような継承についての記述をみつけました。
-----------------------------------------------------------------------------
継承の目的は、あるクラスで実装したメソッドなどの機能を利用して、
さらに実装を追加する差分コーディングです。
一つのクラスから複数のサブクラスを作ることも良くあります。
このような時、それらのサブクラス型オブジェクトの参照を代入できる変数として、
スーパークラス型変数を使うことがしばしばあります。
-----------------------------------------------------------------------------
サブクラス型オブジェクトの参照を代入できる変数として、
スーパークラス型変数を使うことがある、と
いうのはどういった場合に使うのでしょうか。

よろしくお願いします。

A 回答 (3件)

例えば、そういうクラス達を配列に入れることを考えると、


サブクラスの配列を作ると、それには、サブクラスのオブジェクトしか入れられませんよね。
そういう、継承関係にあるようなクラス群を同じような操作で扱いたい時には、スーパークラスの配列にしておけば、色々なサブクラスを同じ配列に入れることができるし、共通部分の操作は、同じような操作が適用できます。
そういうことは、メソッドとして共通の操作をしたい場合も、仮引数としてスーパークラスで受けるようなメソッドにしておけば、そうした継承関係にあるクラスを同一のメソッドで処理することができます。
    • good
    • 0
この回答へのお礼

なるほど、そういうわけだったのですね。
なんとなくわかったような気がします。
後は実践あるのみです。
ありがとうございました。

お礼日時:2005/08/04 00:47

特に難しいことではなく、


「サブクラス型オブジェクトの参照を代入できる変数として、スーパークラス型変数を使うことがある」の単純なプログラムとして、

List list = new ArrayList();

のようなものがあります。
Listがスーパークラス(ここではインターフェイス)でArrayListがサブクラス(ここでは実装クラス)です。

それよりも、「継承の目的は、あるクラスで実装したメソッドなどの機能を利用して、さらに実装を追加する差分コーディングです」というのは昔の話で、現在ではそういった差分コーディングのための継承の利用は「悪いプログラミング」とされていることを覚えておいたほうがいいでしょう。
    • good
    • 0
この回答へのお礼

なるほど、差分コーディングは良くないのですね。
勉強になりました。
ありがとうございました。

お礼日時:2005/08/04 00:44

例えばJava標準ライブラリでjava.utilパッケージのコレクションの場合、各クラスは任意のオブジェクトを保持できるように全てのクラスのスーパークラスであるObject型を使ってますね。


# 1.5から総称機能が入ったので変わっているかもしれませんけど

あとデザインパターンではよく使いますね。コンポジットとか。Javaではスーパークラス型の代わりにインタフェース型を使うこともありますが。
    • good
    • 0
この回答へのお礼

デザインパターン?
まだまだ勉強することが沢山ありそうです。
ありがとうございました。

お礼日時:2005/08/04 00:45

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