UnityLearn Scripting Tutorials -Member Hiding-日本語
UnityLearnのチュートリアルを日本語に翻訳しました。
素人の翻訳なので間違いがあると思います。
間違いを見つけた人はコメントでおしえていただけると嬉しいです。
日本語訳
継承では、parentクラスのメンバはchildクラスに継承され、自動的に利用可能になります。
childクラスでparentクラスのメンバを再生成、再宣言することはメンバ非表示と呼ばれます。
メンバ非表示には、「new」キーワードを少し違った使い方をします。
基底クラスのメンバを非表示にするためには、childクラスのメンバを、そのメンバの型の前に“new”を置いて宣言します。
通常の状態では、この方法では、宣言されたメンバの使用に変化はありません。
しかし、childクラスがparentクラスにアップキャストされ、使われたとき、そのchildクラスのインスタンスはparentクラスのメンバになります。
Orc(オーク)はEnemyから継承された、という継承関係について考えてみましょう。
ここでは、EnemyはHumanoidから継承されているとしましょう。
Humanoidでは、Yell()というメソッドがあり、それで、audio clipを再生させ、モデルの腕を動かします。
Enemyでは、Yell()という別の関数があり、これは、ここではEnemyのテクスチャを黄色に変えます
そして、newを使って宣言してあります。
Orcもまた、別の新しいYell()という関数を持ち、これはNavMeshの送る方向をNorthern Shetland Isle(これ何?)にます。
Humanoid, Enemy, Orcを幾つか含むHumanoidオブジェクトのコレクションがあるとして、考えていきます。
このコレクション内の全てのオブジェクトのYell()関数を呼び出した場合、それぞれは、HumanoidのYell()が呼び出されます。
これは、OrcとEnemyのオブジェクトをHumanoidとして宣言しているためです。
そして、それらは暗黙的にHumanoidにアップキャストされています。
このような動作は通常、望ましくないので、一般的には使われませんが、注意する必要があります。
実際、この動作はオーバーライドと正反対の動作です。
オーバーロードの詳細は下のリンクのオーバーライドのレッスンを見てください。
<終>(2020/4/26)
———————————————————————
Summary
・メンバ非表示とはchildクラスでparentクラスのメンバを再生成、再宣言することである。
・childクラスのメンバに「new」キーワードをつけ、そのchildクラスのインスタンスをparentクラスにアップキャストすると、parentクラスのメンバとなる。
———————————————————————
そのほかの日本語訳の記事はこちらから。