- ベストアンサー
サブクラス型オブジェクトをスーパークラス方に代入
ある所で下記のような継承についての記述をみつけました。 ----------------------------------------------------------------------------- 継承の目的は、あるクラスで実装したメソッドなどの機能を利用して、 さらに実装を追加する差分コーディングです。 一つのクラスから複数のサブクラスを作ることも良くあります。 このような時、それらのサブクラス型オブジェクトの参照を代入できる変数として、 スーパークラス型変数を使うことがしばしばあります。 ----------------------------------------------------------------------------- サブクラス型オブジェクトの参照を代入できる変数として、 スーパークラス型変数を使うことがある、と いうのはどういった場合に使うのでしょうか。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
例えば、そういうクラス達を配列に入れることを考えると、 サブクラスの配列を作ると、それには、サブクラスのオブジェクトしか入れられませんよね。 そういう、継承関係にあるようなクラス群を同じような操作で扱いたい時には、スーパークラスの配列にしておけば、色々なサブクラスを同じ配列に入れることができるし、共通部分の操作は、同じような操作が適用できます。 そういうことは、メソッドとして共通の操作をしたい場合も、仮引数としてスーパークラスで受けるようなメソッドにしておけば、そうした継承関係にあるクラスを同一のメソッドで処理することができます。
その他の回答 (2)
- kazsharp
- ベストアンサー率37% (16/43)
特に難しいことではなく、 「サブクラス型オブジェクトの参照を代入できる変数として、スーパークラス型変数を使うことがある」の単純なプログラムとして、 List list = new ArrayList(); のようなものがあります。 Listがスーパークラス(ここではインターフェイス)でArrayListがサブクラス(ここでは実装クラス)です。 それよりも、「継承の目的は、あるクラスで実装したメソッドなどの機能を利用して、さらに実装を追加する差分コーディングです」というのは昔の話で、現在ではそういった差分コーディングのための継承の利用は「悪いプログラミング」とされていることを覚えておいたほうがいいでしょう。
お礼
なるほど、差分コーディングは良くないのですね。 勉強になりました。 ありがとうございました。
- rinkun
- ベストアンサー率44% (706/1571)
例えばJava標準ライブラリでjava.utilパッケージのコレクションの場合、各クラスは任意のオブジェクトを保持できるように全てのクラスのスーパークラスであるObject型を使ってますね。 # 1.5から総称機能が入ったので変わっているかもしれませんけど あとデザインパターンではよく使いますね。コンポジットとか。Javaではスーパークラス型の代わりにインタフェース型を使うこともありますが。
お礼
デザインパターン? まだまだ勉強することが沢山ありそうです。 ありがとうございました。
お礼
なるほど、そういうわけだったのですね。 なんとなくわかったような気がします。 後は実践あるのみです。 ありがとうございました。