- ベストアンサー
継承とは?
お世話になります。 現在独学でJavaを学んでいるのですが、 『継承』のところでつまずいてしまいました。 参考書を元に継承の章を読んでいたのですが、 まず頭に浮かんだのは、 「継承をする意味は?」ということです。 継承をすることとしないことで何が違うのか。 また、必ず継承を行わなければならないような場面というのはあるのでしょうか? 特にSwingアプリケーションを作成していくと、 継承しないコードと継承したコードで記述ががらっと変わる気がしますが、 動作的に同じであればどっちでも良いのではないのか?というのが、 私の意見です。 この部分についてわかり安く説明している書籍やHPなどがありましたら 教えていただければ幸いです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
(・∀・)ドモ 継承は、 同じ属性を持つものにプラス要素を付けたいときに 使えばよいと思います☆ 例えば、 ・・・んーと。 携帯電話があります。 これは、機種によって様々です。 しかし、元を突き詰めてみると・・・・ ・電話が出来る ・メールが出来る ・日付が分かる とりあえず、全部の携帯にあるのが当然ですよね? これを電話クラスとします。 なので、コレをクラス設計に置き換えて考えると 同じパラメータを使うのに、最初から記述する必要はないと。。 同じ構造なら省こうってことです。 他に携帯の機能として、 ラジオが聞ける ナビゲーション機能あり ゲームが出来る 辞書がついてる 等など これらは、元の電話というクラスに追加機能として加えられたもの でも、だからと言って、 これらの機能が全て携帯についているわけでもない。 そう、元のクラスに+αをしただけです。 だから、元のクラスになっている電話クラスがないとこれらは 成り立たないとなります。 色々派生するために、元があって、継承がある というのは駄目でしょうか? あと、一応継承は、複数も可能です☆ 携帯電話といえば、カメラ機能、テレビ機能なんてのもありますよね? これは、テレビ、カメラと言った別のクラスも継承して利用できます☆ ってことで、こういう元のクラスがあると継承するだけでも新しいクラスが簡単に作成できる利点があります。 分かりにくい表現もある&長文でごめんなさいーww
その他の回答 (3)
- fortranxp
- ベストアンサー率26% (181/684)
継承ではメソッドのオーバーライドと オーバーロードの違いが理解できるかが ポイントでしょう。 でもextendsなので単に拡張すると 取り敢えず考えて宜しいかと思い ます。 その他実装implementsも似たような 機能と比較しても面白いですね。 いずれにしても世の中とはあまり 馴染みのない表現方法なので いろいろ複数作って検討されると よいですね。
お礼
やはり習うより慣れろということになるのでしょうね。 ありがとうございました。
- PED02744
- ベストアンサー率40% (157/390)
継承を「する」とか「しない」とか いうのはちょっと違うかな・・・という気がします。 少なくとも、あなたが何かJAVAでクラスを書いたとしたら、 それだけでもう「Object型を継承している」のですから。 どうしても理解できなければ、無理をして継承を使う必要はないと思いますよ。 上でも言いましたけど、暗黙の了解的に継承されたクラスを使っているはずですが(笑) ただ、これから何本もプログラムを作っていると、継承させた方が楽な場合がだんだんわかってくると思います。 そのとき、継承を使えばよいのではないでしょうか。
お礼
なるほど、既にJavaでクラスを記述している時点で継承していることになるのですね。 そしてやはり、継承自体をしなければならないということはなく、 今後色々なプログラムを作成することで徐々に理解できると思ったほうが良いということなんですね。 ありがとうございました。
- dyna_1550
- ベストアンサー率34% (122/353)
継承はテクニックのひとつで、間違って利用すると再利用性などを 欠如してしまう危険性があります。デザインパターンを勉強すると より有効な使い方が理解できると思います。 継承でよく出てくる言葉に、「is a 関係」と「has a 関係」があります。 「is a 関係」は継承してよいとされ、「has a 関係」は継承ではなく、インプリメントで設計すべきとされています。 has a 関係 の例でいくと、「ハンドルと車」という関係が例にあげられ、 車クラスはハンドルクラスを継承するという設計をしてはいけない、 となります。
お礼
ここら辺はちょっと理解できませんでした。 これから勉強して徐々に理解して行こうと思います。 ありがとうございました。
お礼
早速の回答ありがとうございます。 簡単に考えると継承というのは同じ機能がもともとあるなら、 わざわざまた作らずに使いまわせば良いということと解釈しました。 危険なのは継承元のクラスが誤っているとサブクラスも誤った処理を行う可能性があるということでしょうか…