‫お帰りなさい｡
‫前回のビデオでは､ アブストラクトの基本をご覧いただきました｡
‫そして､ その様子をもう少しお見せしたいと思います｡
‫それでは､ キューブを作成してみましょう｡
‫そして､ それは......アイス・キューブ・ベイビーズになるんだ｡
‫そして､ それは立方体としての形状を持つことになるのです｡
‫わかりました｡
‫つまり､ これはかなりの確率で立方体を作りたいということで､ 今見ている立方体のような形でなければならないのです｡
‫つまり､ 特定のクラス型として持ちたいという意味で､ これをキーワードとして使っています｡ 一方､ 特定のデータ型は､
‫データ型はキューブで､ これは私たち自身が作ったデータ型です｡
‫INTとして何か言っているようなものです｡
‫そこで､ これを整数にしたいのですが､ 今回はINTのような基本的なデータ型ではなく､ 自分たちで作ったデータ型を使っています｡
‫これから行うのは､ アイスキューブが NULL ではないかどうかを確認することです｡
‫しかし､ NULLでなければ､ 立方体になります｡
‫つまり､ NULLであれば､ この形状は立方体ではない､ つまり､ これを足したり立方体にしたりすることがうまくいかなかっただけだと言ってよいのです｡
‫だって､ まあ､ キューバになければ､ たぶん､ 私たちの場合､ 球体になるんでしょう？
‫さらに､ 二重の等号やヌルを使うだけでなく､ 特定の型であるかどうかをチェックすることもできます｡
‫しかし､ 実際に形状が立方体型かどうかを確認することはできます｡
‫そして､ そうであるならば､ これも安心して言えることです｡
‫は立方体です｡
‫あるいは､ この形は立方体だ｡
‫わかりました｡
‫そこで､ ある変数が特定の型であるかどうかを調べるために､ isキーワードを使っています｡
‫ある型として変数を作成するために､ asキーワードを使用します｡
‫いつもうまくいくとは限りませんが｡
‫わかりました｡
‫ここでもう一度実行すると､ これがシェイプであること､ あるいはシェイプが立方体でないことが一度だけ確認できます｡
‫そして､ 片方は立方体､ もう片方は立方体でないことから､ これが立方体であることがわかるでしょう｡
‫だから､ 最初のものは球体で､ 形状は立方体でないと書いてあるんです｡
‫そして次は､ これは立方体です｡
‫そして､ その形状は立方体であると書かれています｡
‫わかりました｡
‫これで実際に動作したことが確認できたので､ 実際に確認してみましょう｡
‫しかも､ この場合､ 超バカでしょ？
‫なぜなら､ コンソールに何かを書き込むために､ それをチェックしているだけだからです｡
‫しかし､ 場合によっては､ それを使って何かできるかもしれないので､ 実際にプログラムに関連するかもしれません｡
‫キューブであれば､ 計算ができるのか､ 調整ができるのか､ データベースに格納できるのか､
‫何か特別なことができるのです｡
‫それ以外のものであれば､ また違った対処をすることになります｡
‫なるほど､ そういう手もあるんですね｡
‫かなりイケてますね｡
‫これは､ ここで使っているポリモーフィズムの一部です｡
‫かっこいいですね｡
‫このように､ もう1つ使える機能があることがお分かりいただけると思います｡
‫ここで､ オブジェクトから立方体にキャストする場合を考えてみましょう｡
‫もちろん､ これはオブジェクトが実際に立方体を含んでいる場合にのみ機能します｡
‫よし､ じゃあキューブを作ってみよう｡
‫これをキューブ1と呼ぶことにします｡
‫そして､ それは新しい立方体になり､ 半径が7になるのです｡
‫わかりました｡
‫そこで､ 新しいキューブを作成し､ これをキューブ2と呼んで､ キューブをキャストすることができるようになりました｡
‫立方体に1つ｡
‫ということは､ どういうことでしょうか？
‫キューブ2という新しい立方体を作り､ キューブ1を立方体に鋳造したいということです｡
‫もちろん､ これはキューブ1が実際に立方体である場合にのみ機能する｡
‫そして今､ 私たちはそれが立方体であることを知っています｡
‫でもそれは､ 私たちがこのようにプログラムしたからです｡
‫最後は､ 実はオブジェクトなんです｡
‫つまり､ 立方体を含むオブジェクトなんですね｡
‫オブジェクトは､ ネットのクラス階層にあるすべてのクラスをサポートし､ 派生クラスに対して低レベルのサービスを提供するクラスである｡
‫これは､ すべてのクラスがこのobject every classというクラスを継承していることを意味する｡
‫そして､ それはCの場合です｡
‫それは､ Javaなどのプログラミング言語でも同じです｡
‫それはその後､ おそらく任意の｡
‫例えば､ Kotlinではanyというキーワードがありますが､ これも同じような概念です｡
‫そうですね｡
‫つまり､ このオブジェクトクラスには､ ハッシュに対する2つの文字列のようなものが含まれており､ もっと知りたい方は実際に調べてみてください｡
‫コントロールキーを押したままにしておくと､ 等値参照で等値がハッシュコードになり､ 文字列にタイプされるのがわかる｡
‫つまり､ これらは実装していなくても､ すべてのオブジェクトが持っているメソッドなのです｡
‫によって､ 非常に早くわかるんですね｡
‫これを､ 例えば､ 私たちのシェイプに使うのです｡
‫だから､ ここに｡
‫シェイプスタートからストリングまで｡
‫シェイプドットイコール､ ゲットハッシュコード､ ゲットインフォなどと同じメソッドを持っているのがわかると思います｡
‫つまり､ ここにあるようなプロパティのほとんどは実装されておらず､ どのクラスもオブジェクトを継承しているために存在しているだけなのです｡
‫わかりました｡
‫だから今
‫ここで用意したQ2を使って､ コンソールに何かを書き込んでみましょう｡
‫そこで､ C． W. という体積を表示し､ その体積を渡すか表示するかするだけです｡
‫だから､ キューブ→ネーム､ キューブ→ドットボリューム｡
‫わかりました｡
‫そして､ これはもちろん､ うまくいくに越したことはありません｡
‫実際に立方体であれば､ 我々の場合は立方体です｡
‫だから､ 問題なく使えるはずです｡
‫では､ 実行してみましょう｡
‫そして､ CUPEは300､ 343のボリュームがあることがわかります｡
‫つまり､ CUPEが7人というキューブを作ったわけです｡
‫わかりました｡
‫というわけで､ これでおしまいです｡
‫抽象クラスの使い方､ 抽象クラスの扱い方､ 抽象クラスを作ると､ もちろん抽象メソッドを作ることができ､
‫それをクラスが継承したときに実装しなければならない､ ということはおわかりいただけたと思います｡
‫そのため､ 一度shapeを継承したクラスは
‫了解です｡
‫このビデオを楽しんでいただけたでしょうか｡
‫これもまた､ 感想をいただいた動画のひとつです｡
‫という要望があったので､ この具体的な動画を作ることにしました｡
‫また､ 他に要望や質問があれば､ 質問欄やdiscordで教えてください｡