- - PR -
抽象クラスについて。
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-04-11 23:12
普通抽象クラスはインスタンスは作成できませんが。。。。
抽象クラスを継承してabstract定義されているメソッドを定義しなおせば抽象クラスではなくなるので、インスタンスを作成できこれにより、抽象クラスの変数としてインスタンスを作成できるらしいですが これによりいったい何ができるようになるのですか? | ||||||||
|
投稿日時: 2008-04-12 00:29
抽象クラスはオブジェクト指向と関係があります。
コンピュータとしてできることが増えるわけではないですが これがあるとオブジェクト指向設計がしやすくなります。 オブジェクト指向によってどんな恩恵があるか調べてみるとよいと思います。 | ||||||||
|
投稿日時: 2008-04-12 10:32
・抽象クラスはインスタンスは作成できない
⇒ 言語仕様でそうなっています。 ・抽象クラスを継承してabstract定義されているメソッドを定義しなおせば抽象クラスではなくなる ⇒ 当然ながら、インスタンスが生成できるようになります。 この時点で、抽象クラスではありません。 ・抽象クラスの変数としてインスタンスを作成できる ⇒ この部分が理解されていない箇所です。 変数の型とインスタンスの型は必ずしも一致する必要はありません。 もの凄く簡単に言えば、インスタンスの型よりも変数の型の方がより抽象的な型でであれば構いません。 言語仕様的には、変数の型はインスタンスの型のスーパークラスであれば自然に代入などが可能です。 どうしてこのような仕様になっているかは、まだ学習する段階に達していないと思いますが、オブジェクト指向の勉強をしていく中で学ぶと思います。 | ||||||||
|
投稿日時: 2008-04-12 12:01
・インスタンスを作成できるようになります。 ・作成できたインスタンスのメソッドやフィールドにアクセスできるようになります。 ・… 「メソッドを定義しなおせば」と書かれていますが、定義し直すというよりは、定義がないので定義する、と言うほうが良いかもしれません。 (以下、追加。) 「定義はあるが実装がないので実装する、のほうが適切でしょうか。 [ メッセージ編集済み 編集者: unibon 編集日時 2008-04-12 12:07 ] | ||||||||
|
投稿日時: 2008-04-12 21:02
クラスについて理解したら、次は抽象クラスではなくインターフェイスについて学びましょう。クラスとインターフェイスを理解したら、ポリモーフィズム(多態性)について学びましょう。ここまで理解すれば、抽象クラスのことが 3分で理解できるようになっているはずです。 抽象クラスとは、インターフェイス+(一部の)実装コード のことなのです。
これが多態性。別に抽象クラスでなくても、親クラスの型にも代入できたでしょ? まあ、抽象クラスについて時間をかけて学ぶ必要はないですよ。抽象クラスを理解できていないということは、インターフェイスや多態性を理解できていないということだろうから、まずはそちらを理解するのが良いと思います。 | ||||||||
|
投稿日時: 2008-04-12 22:29
呼び出し同じで中身はどーでもいい、ってのが「たたいせい」なんじゃ? で、 「何が出来るのか?」 ですが、統一ルールのもとに処理を必要な時と場所に応じて 動的に(作りこんだ機能のみを任意に)変更できるってのが メリットだと認識しています。 親クラス変数に子クラスを代入できるってのは、ただの仕様。 「たたいせい」以前の継承のお話かと。 渡辺さん家の子供の芳江さん 親 oya = 渡辺さん 子 ko = 渡辺さん >抽象クラスについて時間をかけて学ぶ必要はないですよ いや、重要です。自分で組む機会はそうそう無いけど。 検索キーワード:多態性 http://msugai.fc2web.com/java/polymorphism.html http://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%95%E3%82%A3%E3%82%BA%E3%83%A0 http://oshiete1.goo.ne.jp/qa1439975.html 訂正:コード/コード追加 また訂正ばっかし・・・ 訂正2:一部文言訂正。 インターフェースとの違いは自分流解釈では、インターフェースはオプション。 アブストラクトは強制。どちらも作り手に実装の幅を広げるものであると理解 しています。 [ メッセージ編集済み 編集者: ぴあちゃん 編集日時 2008-04-12 22:31 ] [ メッセージ編集済み 編集者: ぴあちゃん 編集日時 2008-04-12 22:38 ] | ||||||||
|
投稿日時: 2008-04-13 12:27
なにか誤解しているようですね。私は抽象クラスが重要ではないとは一言も言っていませんよ。簡単に理解できる日が来るから、時間をかけて学ぶ必要はないと言っています。抽象クラスなんて簡単なものが理解できないはずはないです。抽象クラスが理解できないと思っている人は、そもそも、インターフェイスや多態性が理解できていないのでしょう。
「オプション」とか「強制」の意味が分かりませんが、重要度では インターフェイス >>>> (越えられない壁) >>>> 抽象クラス ですよ。抽象クラスは略記法みたいなもので、なければないで誰も困りません。そういう意味では抽象クラスこそオプションだと思いますけどねえ。学習という観点では、抽象クラスなんて完全にオプション。時間をかけて学ぶようなものではないです。 | ||||||||
|
投稿日時: 2008-04-13 13:09
喧嘩売るような書き込みすみません。
以後気をつけます。 抽象クラスは重要じゃないのですね・・・ 結構頻繁に使うものなんですが。僕の環境だけが頻繁に使うものであって 世間では重要視されない付録みたいな扱いなんですか。 うーむ。 世間知らずでした。 | ||||||||
