‫お帰りなさい｡
‫このビデオでは､ 相続について説明しています｡
‫そして､ 先に進み､ postと呼ぶクラスを作成することにします｡
‫新しいクラスで､ ポストになるんですね｡
‫つまり､ TwitterやFacebookなど､ ソーシャルメディアへの投稿を想像してみてください｡
‫そして､ postを継承して､ 画像postや動画postのようなものを作りたいということです｡
‫このようなことで､ 継承の概念をもう少し理解できるようになり､ 将来的に異なるオブジェクトや異なる状況に適用することができます｡
‫まず､ 投稿には変数があり､ これは現在の投稿IDでprivate staticにするつもりです｡
‫これはそのポストのフィールドになるわけで､ 静止しているんです｡
‫だから､ この記事以外でも利用できるのです｡
‫また､ アプリケーションを起動した時点で作成されます｡
‫そうですね｡
‫そこで､ まずできることは､ いくつかのプロパティを作成することです｡
‫そして､ プロパティの背後にある考え方は､ ご存知のように､ オブジェクトに関するいくつかの詳細な情報を提供することです｡
‫ですから､ 私たちの場合､ postというオブジェクトを作ると､ どうしても欲しい情報があるんです｡
‫例えば､ IDは管理者として､ プログラマーとしてよく知りたいのであって､ ユーザーとしてはそれほどでもありません｡
‫エンドユーザーは投稿IDに興味がありませんが､ 管理者またはプログラムとしては､ すべての投稿が識別され､
‫一意のIDを持つ必要があるため､ 興味があるはずです｡
‫だから､ IDを持つことにしたんです｡
‫タイトルが必要です｡
‫例えば､ 投稿にはタイトル､ 説明､ テキストなどがあります｡
‫そして､ その投稿を誰が送ったのか､ 公開すべきかどうかを知る必要があります｡
‫もちろん､ ポストについて知るべきことはもっとたくさんありますし､ ポストにはもっとたくさんのプロパティがあり得ますが､
‫今はシンプルに考えています｡
‫ここではprotectedプロパティを作成します｡ protectedプロパティはまだ使用していませんが､ 最終的にprotectはこのクラス､
‫postクラス､ 派生クラス､ つまりpostから派生するクラスでのみ使用できることを意味します｡
‫まず､ IDを表すint I dを作成し､ getとsetを使用することにします｡
‫次に別の物件｡
‫ここではPropを使い､ 文字列にしてtitleと呼び､ 前と同じくprotectedにします｡
‫次に､ もう一つのプロパティですが､ これも文字列を使って､ ユーザー名で送信するようにします｡
‫だから､ 誰が送ったか､ それも選ばれることになる｡
‫そして最後に､ is publicというプロパティがあります｡
‫つまり､ 2つの値しか持てないからブーリアンなんですね｡
‫つまり､ 公開されているか､ 公開されていないかのどちらかです｡
‫つまり､ 単純にこのような性質を持っているわけですね｡
‫さて､ ここでデフォルトのコンストラクタを作成するわけですが､ デフォルトのコンストラクタについて知っておくべきことがあります｡
‫派生した場合｡
‫ドラフトクラスが明示的に基底節のコンストラクタを呼び出さない場合､ デフォルトのコンストラクタは暗黙的に呼び出されます｡
‫だから､ ここで作るんです｡
‫ここでパラメータを取得しないので､ 公開投稿を作成し､ その投稿はうまくいくでしょう｡
‫定義されるか､ ここで値を設定しますので､ IDは0になります｡
‫それから､ タイトルは､ 例えば､ 私の最初の投稿､ あるいは空白のあるものです｡
‫そのような最初の投稿は､ その後､ 公開されているのですか？
‫まあ､ 私たちはそれを見てから､ ユーザー名で送信したいので､ 真としましょうよく私が送信されます｡
‫では､ この場合の新しいとは？
‫このため､ 投稿を作成すると､ この投稿がここに表示されるだけです｡
‫初投稿になるわけですね｡
‫次に､ いくつかのパラメータを持つ別のインスタンスコンストラクタを持ちたいと思います｡
‫だから､ 実際にそういうことを定義できるような記事を作りたいんです｡
‫IDは定義しないが､ タイトルは定義できる｡
‫公開されているかどうか､ どのユーザー名で送信されているかがわかる｡
‫ですから､ 例えばちょっとしたソーシャルメディアプログラムを書いて､ 投稿機能を持たせ､ 投稿を作成するたびにそれらの情報を送る必要があると想像できます｡
‫つまり､ ユーザーが記事を作成すると､ 自動的に定義されたIDが付与され､ ユーザーが入力した内容に基づいて自動的に定義された､
‫または定義されたタイトルが付与されるのです｡
‫ユーザーがチェックした内容に基づいて公開され､ 公開することを決めたかどうか､ 本人から送信されるものです｡
‫つまり､ これは投稿が作成されるたびに渡されるデータなのです｡
‫それでは､ 3つのパラメータを持つインスタンスコンストラクタを作成しましょう｡
‫そこで､ public postを作成し､ ここではtitleという文字列を使用することにします｡
‫Boolは公開､ stringはユーザー名で送信､ ここではIDを設定しますが､ そのために必要なものがあります｡
‫だから､ もうゼロにしちゃおうかな｡
‫しかし､ 各投稿に対して常に新しいIDを作成するメソッドを追加する必要がありますし､ それがどのように機能するかは後で見てみましょう｡
‫だから､ このタイトルはタイトルになるんです｡
‫このsent by usernameはsent by usernameになり､ ここの文字はキャップされず､ このドットのis publicはis
‫publicになり､ プロパティではなく､ このパラメータになります｡
‫だから今は､ ゼロにならないように設定しています｡
‫IDは一意でなければならない｡
‫そこで､ 最善の方法は､ get next IDというメソッドを作成し､ それを保護することです｡
‫これは単純に次のID､ つまり現在の投稿IDを返すもので､ ここではその前にインクリメントしています｡
‫つまり､ 呼び出されるたびに､ 自分自身を1つずつ増やしていくのです｡
‫だから､ ここのこれ､ 今のポストIDが1つ増えることになるんです｡
‫そこで､ ここではゼロをセットする代わりに､ 次のID､ または次のIDを取得するメソッドを呼び出すことにします｡
‫さて､ このような投稿できるプログラムには､ 他にどのようなものが欲しいですか？
‫まあ､ 投稿を調整する機能かな｡
‫ですから､ とりあえず投稿を作成し､ その投稿を変更できなければ､ かなり不満です｡
‫Snapchatでも､ 写真を作ったらそこにある､ というようなことが実際に起こっているんです｡
‫その画像は編集できません｡ テキストを編集できるかどうかはわかりませんが､ ここではテキストを編集できるようにしたいので､
‫新しいメソッド public void update を作成し､ これでタイトルを取り込むことにします｡
‫そして､ プールが公開されているのは､ よく考えてみれば､ ユーザーが何を更新できるようにすればいいのか？
‫IDの更新ができないはずだ｡
‫ユーザー名は本人が送るものなので､ 本人が更新できるわけでもないはずです｡
‫だから､ 彼はユーザー名を持っていて､ それが投稿の更新に影響することはないはずです｡
‫つまり､ タイトルを変更し､ 公開するかどうかというブール値を変更するだけです｡
‫そして､ ここでは単に､ このタイトルはタイトルに､ 公開されているこれは公開に､ と言っているのです｡
‫ということは､ 今回のようにポストがあるということですね｡
‫ポストとは設計図である｡
‫さて､ このクラスは､ あらゆるポストインスタンスの青写真です｡
‫だから､ その自分であるものを投稿するときは､ 必ずそのインスタンスが投稿になる｡
‫そして､ そのタイトルを変更すると､ その特定の投稿のタイトルが変更されます｡
‫そして､ 変更した場合､ それが公開であろうとなかろうと､ その特定の投稿の公開を変更するのです｡
‫そのため､ 既存の投稿のタイトルとそれを宣伝するための更新が可能になります｡
‫次に作成したいのは､ system dot objectから継承した2つの文字列の仮想メソッドオーバーライドです｡
‫つまり､ System Dotオブジェクトは､ Systemのここに来るクラスです｡
‫だから､ それを利用すればいいんです｡
‫嬰ハ音記号の中にあるので､ 単純にそれを利用すればいいのです｡
‫そして､ 文字列と呼ばれるメソッドがあり､ 実際にはそこから2つの文字列メソッドを呼び出すことができます｡
‫だから
‫システムです｡
‫しかし､ objectには2つの文字列メソッドがあり､ これをオーバーライドしたい｡ なぜなら､ すべてのクラス､
‫つまり我々のpostクラスも､ このobjectクラスを継承しているからだ｡
‫つまり､ そのオブジェクトが継承できるクラスであるというシステムです｡
‫例えば､ このオブジェクトは､ これを継承することができますし､ 実際にすべてのクラスがこれを継承しています｡
‫そこで今度は､ そのメソッドの一つをオーバーライドすることができます｡
‫つまり､ public overrideとstringと2つのstringです｡
‫ご覧のように､ すでに提案されています｡
‫つまり､ オブジェクトクラスの中にある何か現在のオブジェクトを表す文字列を返すと言うことです｡
‫そして､ ご覧のようにreturn based to stringというものがあります｡
‫つまり､ ベースクラスには2つの文字列メソッドがあり､ それをそのまま実行しても､ ベースクラスの2つの文字列メソッドを使用するだけなので､
‫ほとんど何の意味もないのです｡
‫しかし､ ベースクラスが返すであろうものを返すのではなく､ 調整できるように変更することができるのです｡
‫私たちは独自のことをしたいので､ 特定の情報を持つことになる文字列をフォーマットするために､ 文字列フォーマットを使用するつもりです｡
‫つまり､ IDであり､ タイトルであり､ 誰が送ったか､ ということになるわけです｡
‫だから､ こういう情報はこういう風に使おうと思っているんです｡
‫つまり､ このIDになるので､ ID､ 次にこの､ タイトル､ 最後にユーザー名で送られるこのドットになります｡
‫それが返ってくるわけです｡
‫つまり､ 2つの文字列を使うと､ 単にオブジェクトに関する情報を返すのではなく､ 標準的なフォーマットや私たちが作成したフォーマットで返してくれるのです｡
‫これが私たちのフォーマットなんですね｡
‫わかりました｡
‫だから
‫そのクラスのオブジェクトを作成してみましょう｡
‫では､ プログラムに入り､ ここで投稿を作成しましょう｡
‫だからポストポスト1が新しいポストなのです｡
‫そして､ ここでいくつかの情報を入力するか､ そのままにしておくことができます｡
‫つまり､ このままにしておくと､ これがデフォルトのコンストラクタとして呼び出されることになります｡
‫では､ こちらのあれを｡
‫そうしないと､ 違うのが呼ばれることになるしね｡
‫では､ 私が何かを投稿したとしましょう｡
‫誕生日のお祝いをありがとうございました｡
‫だから､ みんなに誕生日を祝ってもらったんだ｡
‫だから､ ありがとうございますと言うだけで､ 友達に見てもらいたいから本当にしてあげたいから､ 公開した方がいいんです｡
‫そして､ それを送るのがユタ州のデニス・パンさんです｡
‫もちろん､ すべての処理を行うユーザークラスを用意し､ どのユーザーがログインしたかなどを簡単にチェックすることもできます｡
‫しかし､ 今のところ､ ここではハードコードされた文字列を使用するだけです｡
‫だから､ デニス､ ユタになるんだ｡
‫これで新しい投稿ができましたので､ コンソールに書き込むことができます｡
‫だからWで､ 文字列にポストドットと言って､ ここではもちろんポストワンです｡
‫このインスタンスがpostインスタンスで､ postインスタンスを呼び出すと､ コンソールに何かを書き込むので､
‫それが何であるかを確認するために､ ここで再調整する必要があります｡
‫だから､ コンソールを開いておいて､ そこで何が起こっているかを確認したいのです｡
‫そして､ 私たちは､ ご覧のように､ 1つは､ この誕生日､ デニス・パネッタによるものである誕生日に感謝し､
‫この1つは､ この投稿のIDです｡
‫ということは､ こちらの投稿は
‫こちらは新しいIDを取得し､ 新しいIDはゼロプラスプラス1かプラス1､ つまり1だけということになるのです｡
‫だから､ ここでこの1枚を手に入れることができるのです｡
‫つまり､ IDが1つで､ それが投稿情報､ それがデニス・パンによる送信者ということです｡
‫さて､ これでポストができましたので､ 次は継承を使ってみましょう｡
‫というのも､ 今のところ､ この2つの文字列を除けば､ 実は継承がないのです｡
‫だから実は､ あなただけに｡
‫つまり､ 先ほど言ったように､ そのオブジェクトのシステムから継承された2つの文字列メソッドを仮想メソッドでオーバーライドしているわけです｡
‫では､ 次に新しいクラスを作成しましょう｡
‫というのも､ これまでは特定のシンプルなテキストしか投稿できませんでしたが､ 今後は画像も投稿できるようにしたいからです｡
‫そして今､ イメージ投稿は私たちのベースクラスpostの派生クラスであるべきです｡
‫なぜなら､ ここにあるクラスはとてもシンプルなクラスなので､ それを継承して行きたいからです｡
‫そこで､ 他のクラスを継承するために､ コロンで区切ってから､ 継承したいクラスの名前を入力します｡
‫なので､ postから継承したい｡
‫そして､ それによってできることは､ その機能をすべて使うことです｡
‫これはとてもクールなことで､ プロパティも使えるし､ コンストラクタ以外の変数も使えるんだ｡
‫そうそう､ じゃあ､ そうしましょうか｡
‫そして､ 画像投稿を拡張しよう｡
‫ご存知のように､ これはpostから派生したもので､ 今度はimage URLという別のプロパティとコンストラクタを持つ必要があります｡
‫そこで付け加えたいのが､ その点です｡
‫まず､ imageという文字列のプロパティが必要です｡
‫画像投稿の画像urlになるのはlですね｡
‫そこで､ 何かを投稿し､ その中に画像があるとします｡
‫そうすると自動的に､ あるいは画像投稿になって､ 画像URLが必要になるはずです｡
‫つまり､ 画像が保存されている場所であり､ それは私たちのサーバーであったり､ 単にインターネット上であったりするわけです｡
‫ですから､ そこにあるものは何でも､ 私たちはこれを持っていますし､ 画像投稿のためにはこの画像URLを持つ必要があるのです｡
‫では､ 非常にシンプルなコンストラクタを作成してみましょう｡ public image postというだけで､
‫他には何もありません｡
‫ご覧の通り､ 何も入っていません｡
‫ここでは何もしたくないんです｡
‫そして､ ここに別のポストや画像ポストコンストラクタを作成します｡
‫しかし､ 今回はここにいくつかのパラメータが欲しい｡
‫つまり､ 文字列のタイトル､ ユーザー名による文字列の送信､ 文字列の画像URL､ そして実際にu r lとboolは公開されることになります｡
‫だから､ そのすべてを手に入れたいのです｡
‫そして､ 今度は画像投稿で､ もう一度IDを設定したいと思います｡
‫このドットIDはget next idとイコールで､ なんかもうカッコイイですね｡
‫このIDは一体どこから出ているのでしょうか？
‫そして､ このget next IDはどこから出てくるのでしょうか？
‫まあ､ ポストから来るんですけどね｡
‫そこで､ このメソッド､ このプロテクトされたメソッドを使用します｡
‫ここに呼び込むだけで､ まるで自分たちのもののように使うことができるのです｡
‫ですから､ post dot get next IDのような言い方も必要なく､ 単にget next IDと言い､ このIDに対しても同じことを言うだけでいいのです｡
‫つまり､ 各画像投稿には､ 投稿そのものと同じものであるIDがあるのです｡
‫そして今､ それはタイトルにも言えることです｡
‫だから､ タイトルはタイトルになるんです｡
‫すると､ このドットsend by usernameは､ ユーザー名で送信されることになります｡
‫そして最後に､ このイズ・パブリックはイズ・パブリックになる｡
‫今､ かなりイケてますね｡
‫そういうものを使っていけばいいんです｡
‫それは素晴らしいことです｡
‫また､ 独自のプロパティとして､ 画像のURLも用意しました｡
‫そのため､ 画像投稿を行う場合は､ 必ず画像のURLを引数として渡さなければならない｡
‫そこで､ この画像URLを画像URLにすると言うわけです｡
‫つまり､ 一方ではポストから受け継いだものがあるわけです｡
‫だから､ ここに書き加えることにする｡
‫そして､ 一方では､ 自分たちのメンバーであるものを｡
‫つまり､ プロパティ画像のURLは､ 画像投稿のメンバーであり､ 投稿のメンバーではない｡
‫そして､ それは大切なことなのです｡
‫だからPostはこの画像URLを知らないし､ 関係ない｡
‫しかし､ 私たちのイメージポストは､ ポストのすべてのプロパティについて知っているので､ それは継承されます｡
‫さて､ こちらの画像投稿について､ ひとつだけ小さなことを｡
‫だから
‫どちらのコンストラクタも基底クラスを呼び出さないので､ この2つが必要です｡
‫つまり､ ベースクラスのコンストラクタを呼び出すことなく､ ベースクラスのデフォルトコンストラクタを暗黙的に呼び出しているのです｡
‫だから､ 今回のものも､ 今回のものも､ ベースクラスのもの､ コンストラクタのものではありません｡
‫そのため､ このデフォルトコンストラクタが呼び出されるか､ 私たちの投稿の中にベースコンストラクタが存在する必要があります｡
‫だから作ったんです｡
‫なぜなら､ なぜそれが必要なのかと疑問に思ったかもしれません｡
‫なぜそこにあるのか？
‫まあ､ 明示的に呼び出さないから必須なんだけどね｡
‫それがオンになっている｡
‫と暗黙の了解で呼び出されることになる｡
‫そうですね｡
‫素晴らしい｡
‫ということですね｡
‫それでは､ プログラムクラスでポストを1つ作成してみましょう｡
‫そして､ これから画像投稿を作成し､ 新しい画像投稿として､ 実際に名前をつけてみます｡
‫イメージポストワンということで
‫新しいイメージの投稿になりそうです｡
‫そして､ 新しい靴を買ったからチェックするんだけど､ これがめちゃくちゃいいんだ｡
‫誰が送ったのか？
‫デニス・パネッタは､ 新しい靴に大喜びしていたよ｡
‫もちろん､ それらの画像へのリンクも必要だそうです｡
‫彼は画像をアップロードしただけですが､ 画像自体にはリンクが張られていて､ 我々のストレージのどこか､
‫つまり我々のサーバーに保存されています｡
‫だから､ 安全なhttpsになるし､ ここでリンクを偽造するだけだ｡
‫イメージといいますか､ ドットコムスラッシュの靴といい､ まあ､ 公開してくれたわけです｡
‫だから､ 本当なんです｡
‫そして､ 読みやすいように､ 次の行に載せましょう｡
‫これで画像投稿ができました｡ 画像投稿でできることは､ 何が起こっているのかを確認するために､ もう一度コンソールに何かを書き込むことです｡
‫そして､ 画像投稿1ということにしています｡ 2ストリングスで､ これまたカッコいいものです｡
‫そこで､ この2つの文字列メソッドを､ 画像の投稿1に対して呼び出すのです｡
‫そして､ ここに各文字列のメソッドがあるのがわかりますか？
‫しないんです｡
‫というのも､ postのメソッドを継承し､ そのメソッドを2つの文字列と呼んでいるからです｡
‫そして､ それを実行すれば
‫実は､ 運営を止める必要があるんです｡
‫なぜなら､ 私たちはそれを見ないからです｡
‫葦があり､ 葦がなくなる｡
‫だから､ この赤い線をここに貼っておく必要があるんです｡
‫もう一度実行すると､ 「Check out my new shoes by Dennis Panetta」と表示されます｡
‫しかし､ そのリンクはどこにあるのでしょうか？
‫リンクが必要です｡
‫さあ､ リンク先を教えてください｡
‫まあ､ うちのポストの2文字列メソッドはリンクについて知らないので､ ないんですけどね｡
‫リンクについては､ 全く手がかりがありません｡
‫リンクはどうでもいいのです｡
‫必要ないんです｡
‫そこで､ ちょっとしたチャレンジです｡
‫という感じで､ ひとまず動画は終了です｡
‫私たちの画像投稿の中に､ リンクも知らせる2文字列のメソッドを作ってください｡
‫わかりました｡
‫ぜひ試してみてください｡
‫だから､ 私がやることは､ シンプルにすることです｡
‫ここから2つの文字列を画像投稿にコピーして､ ほんの少しフォーマットを変更します｡
‫ここで少し発言を加えます｡
‫もリンクになり､ 3はやはりユーザーになるわけですね｡
‫だから､ ここにリンクが必要なのです｡
‫つまり､ このドット画像URLのカンマは､ IDタイトル､ URL､ そしてユーザー送信の順になっているわけです｡
‫そうすると､ ベース句からオーバーライドするわけです｡
‫そこで､ システムオブジェクトからオーバーロードされた2つの文字列を投稿からオーバーライドすることにします｡
‫だから､ オーバーライドしたり､ 上書きしたりできるのがわかると思います｡
‫そして､ どこが限界なのか､ あるいはどうすればそれを制限できるのかを見ていきます｡
‫では､ 次に実行してみましょう｡
‫そして､ 私たちは見ることができます｡
‫新しい靴をチェックしてください｡
‫以下はそのリンクです｡
‫デニス・パネッタ
‫それで､ コンソールでリンクをクリックできるようになりました｡
‫無理です｡
‫しかし､ 一般的にはリンクをクリックすれば画像を見ることができますし､ 例えば私のツールやアプリは､ そのリンクを読み込んで画像を表示することができます｡
‫わかりました｡
‫それが､ 相続の最初の一歩となるわけです｡
‫長い動画でした｡
‫それは分かっています｡
‫そして､ 相続はそれ以上に大変なことなのです｡
‫そして､ もっともっとカッコよく調べます｡
‫でも､ まずは次の動画でチャレンジしてみましょう｡
‫というわけで､ 次の動画でお会いしましょう｡