0.2 この講座の趣旨
...このテキストの順序 なぜかというと、Javaがちゃんとわかればオブジェクト指向もわかるからです。 Javaの言語仕様には、ちゃんとオブジェクト指向のエッセンスが含まれています。カプセル化、継承、ポリモーフィズム、インタフェース……これらをちゃーんと理解すれば、オブジェクト指向もちゃんと理解できます。 たとえば、Javaのソート機能。 Comparatorインタフェースを用いたソート(SortWithCo...
5.4 オーバーライドされたメソッドを呼び出すと?
...いうだけではなく、元のメソッドを「上書き」するという機能も持っているわけです。 これはとっても重要! 繰り返しになりますが、この「上書きする」という機能はとっても重要です。 この考え方が後の「ポリモーフィズム」で重要になりますので、必ず覚えておいてください。
5.5 スーパーからサブは見えません
...っている」というイメージがありますが、あくまで別々。スーパークラスはサブクラスを関知しないということに注意してください。 使えなくもないよ? 前ページとこのページの内容は、次の次の章で説明する「ポリモーフィズム」という機能の布石です。 その章で説明しますが、実は「ダウンキャスト」というものを使うと、スーパークラスからサブクラスを使うことができます。 その時まで前ページとこのページの内容を覚えておきましょ...
7.1 アップキャスト
アップキャスト この章では、オブジェクト指向で一番「面白い」であろう「ポリモーフィズム」というものを紹介します。 かなり突拍子もない不思議な機能なのですが、オブジェクト指向では必須の機能です。最初は戸惑うかもしれませんが、恐れず挑戦してみましょう。 「参照型変数」の型を変える ...
7.4 ポリモーフィズム!
ポリモーフィズム! 「ポリモーフィズム」しよう! 前ページで説明したように、スーパークラスの参照を通してメソッドを呼び出しても、そのメソッドがオーバーライドされていたら、オーバーライドしたメソッドが呼び出され...
7.5 インスタンスはどのクラス?
インスタンスはどのクラス? 前ページだけだと「ポリモーフィズム」がなんとなくわかっただけだと思うので、もう一つ例を紹介します。 これを見れば、ポリモーフィズムがより不思議で変な機能だということがわかります。 どのインスタンスが使われる? 前ページの例では...
8.1 「ポリモーフィズム」ってどういう意味?
「ポリモーフィズム」ってどういう意味? ポリモーフィズムについても、理解を深めるために色々なQ and Aを考えてみましょう。 poly-morphism 質問:「ポリモーフィズム」って聞き慣れない言葉だけ...
8.4 インスタンスの型を調べるには?
...クラスである可能性があるわけです。 インスタンスの型は? newしている現場が押さえられればインスタンスがどの型か分かりますが、それが分からなければインスタンスの型も分かりません。 そもそも、ポリモーフィズムはインスタンスの型を考えないので、分からなくて当然ということも言えます。 とはいえ、場合によってはダウンキャストがどうしてもしたい場合もあるでしょう。 そのような場合には、インスタンスの型...
8.5 キャストできる? できない?
...ンパイルエラーにならないというだけのことで、結局このキャストはできないのです。 言い換えると、実行時にできないことをコンパイルエラーという形で教えてくれているということです。 インスタンスの型は、ポリモーフィズムにより状況によって変わります。 でも、変数の型によってはインスタンスの型が絞り込める場合があります。その場合、その型をヒントに、キャストできないキャストをしようとしたらコンパイラがエラーで教えてくれ...
9.1 abstractクラスとabstractメソッド
...、その次の章で説明する「インタフェース」を理解するうえでの手助けになるので、とりあえずかじっておきましょう。 抽象クラスを作ってみる ここまでの説明で、オーバーライドとアップキャストを使うことでポリモーフィズムができることはわかったと思います。 この「ポリモーフィズム」を強制させる機能があります。 それがこれから説明する「抽象クラス」というものです。 まずはこの「抽象クラス」というものを作ってみましょ...
9.2 抽象クラスの使い道
... // ……あれ? 実行結果から分かるとおり、サブクラスのprintNyName()メソッドは呼ばれるわけがなく、スーパークラスのprintMyName()メソッドが呼び出されます。 ポリモーフィズムしない このように、オーバーライドする際にメソッド名を間違えることで、オーバーライドに失敗してしまいます。 その他に、引数を変えた場合にもオーバーライドされません。 このように、ちょっとしたミ...
9.3 インスタンスが作れない!
...というわけです。 これは、「9.1 abstractクラスとabstractメソッド」の例のような使い方ができることからも分かると思います。また逆に言えば、参照型変数は作れるので、抽象クラスを使ってポリモーフィズムができる、とも言えます。 抽象クラスは「参照型変数は作れるけど、インスタンスは作れない」ということをしっかり憶えておきましょう。
10.1 インタフェースという「抽象クラスっぽいもの」
...MyName()メソッドを呼び出すと、そのメソッドを実装している「ImplementedクラスのprintMyName()メソッド」が呼び出されます。 このあたりの使用感は抽象メソッドと同じですし、ポリモーフィズムが行われていると素直に考えるといいでしょう。 実装したメソッドを呼び出す このように、インタフェースは抽象クラスに非常によく似ています。 特に機能的には「抽象クラスの強化版」と考えて問題ありま...
10.2 インタフェースはクラスと一緒に「継承」できる!
...このインタフェースはcalc()メソッドを持っています。 「calc」、つまり「計算」をする抽象メソッドということで、実際に「どんな計算をするのか」は、実装するメソッド任せということにします。計算をポリモーフィズムさせるわけですね。 さてここに、「足算機能を持つAddSuperクラス」が元々あったとします。 スーパークラス(再掲) /** * 足算機能を持つクラス。 */ class AddSu...
10.4 インタフェースは「抽象クラスの強力版」?
...ド「抽象メソッド」を、インタフェースと抽象クラスは持つことができます。 この抽象メソッドを使うことで、インタフェースは実装クラスに、抽象クラスはサブクラスに、強制的にメソッドを作らせることができて、ポリモーフィズムを使って呼び出すことができるというわけです。 また、抽象メソッドを持つため、インスタンスが作れないという点も共通しています。インタフェースも抽象クラスも、参照型変数を作れるだけで、newでインスタン...
11.1 結局「オブジェクト指向」ってなに?
結局「オブジェクト指向」ってなに? ここまで、Javaのクラスや継承、ポリモーフィズムやインタフェースについて説明してきました。 でも、ここまでの中で「オブジェクト指向」についてはまったく説明してきませんでした。 では、結局オブジェクト指向ってなんなんでしょう? オブジェクト「指...
11.3 オブジェクト指向を使えば!
...ばオブジェクト中心。 前ページで紹介した手続き型プログラミングと違い、オブジェクト、つまりインスタンスそれぞれが独立しています。 それぞれのインスタンスがインタフェースを通してメソッドを呼び出し、ポリモーフィズムを使って実際のインスタンスが何クラスか分からなくし、さらに内部はカプセル化で隠しています。 このようにすると、単体テストが簡単にでき、問題が発生した場合の切り分けも容易で、修正しても影響範囲が小さく...
11.4 オブジェクト指向分析設計
...使うことで「物」を表現することは可能です。でもそれは「手段として可能」というだけで、「インスタンスは物」ということではありません。 実際、現実には「クラスからインスタンスを作る」という概念や、継承やポリモーフィズムといった機能をそのまま当てはめられる現象はあまりありません。Javaの機能を使って擬似的に現実を模倣することは可能ですが、それは「物」そのものではなく、またその部分にこだわるとJavaの機能を無駄にし...
11.5 オブジェクト指向の問題点
...いです。 そのため、「オブジェクト指向プログラミング」を最初はしようと思っても、途中でどんどんぐちゃぐちゃになっていき、最後はなんだかわからない状態になることもしばしばです。 融通が効かない ポリモーフィズムを使用する場合、「使えるメソッド」は当然参照型変数の型が持っているメソッドに限定されます。 そのため、下手にポリモーフィズムを使ったプログラムを組むと「サブクラスが持っているメソッドが使いたい!」と...
11.6 オブジェクト指向との付き合い方
...うにしましょう。著者や話者が「どっち側か」が分かるとより理解しやすいかもしれません。 これから学ぶべきこと 正直、本コンテンツの内容を理解できていれば、結構レベルは上がっていると思います。実際「ポリモーフィズムって何?」というレベルのプログラマーも多々いますから。 でも、もちろんこれより上のプログラマーもたくさんいます。なので当然、もっともっと勉強する必要があります。 そしてできれば、皆さんには「オブジ...