「アップキャスト」という用語が OOP に関連していることはわかりますが、インターネットを検索しても正確な定義を見つけることができません。
この用語の意味と、この手法が役立つ状況を説明できる人はいますか?
「アップキャスト」という用語が OOP に関連していることはわかりますが、インターネットを検索しても正確な定義を見つけることができません。
この用語の意味と、この手法が役立つ状況を説明できる人はいますか?
投稿したタグの説明から:
アップキャストにより、サブクラス型のオブジェクトを任意のスーパークラス型のオブジェクトとして扱うことができます。
基本的に、擬似コードで例を示すために、サブクラスのインスタンスをそのスーパークラスの 1 つにキャストする場所です。
class Base {
function say_hi() { printf("Hello From Base Class\n"); }
}
class Person extends Base {
function say_hi() { printf("Hello!"); } // Overridden. Java expects an @Override annotation
}
class Dog extends Base {
function say_hi() { printf("Woof!"); } // Again, overridden
}
Base B = new Base();
Base P = new Person(); // Implicit upcast
Dog dog = new Dog();
Base D = (Base)Dog(); // Explicit upcast
B.say_hi(); // Hello from base class
P.say_hi(); // Hello!
D.say_hi(); // Woof!
これが役立つ場面はさまざまです。一般に、それは一種のインターフェースを定義するため、何かをサブクラス化できますが、元のコンテキストで引き続き使用できます。あなたがゲームを持っているとしましょう。あなたは敵のオブジェクトを持っているでしょう。これには、現在の位置、速度、ヘルスなど、いくつかの一般的な機能があります。それにもかかわらず、一部の敵は別の動きをしたり、別のサイコロのアニメーションを再生したり、もちろん別の方法で描画されたりする可能性があります。問題は、それらが同じインターフェイスを持っているため、さまざまな種類の敵を処理するための特別なコードを用意する必要がないことです。
これらのフィールドと空のメソッドを使用してベースの「Enemy」クラスを作成することは理にかなっていますが、それを拡張して、さまざまなモデルとアニメーションを使用して SmallEnemy、EvilEnemy、BossEnemy などを持ち、空のメソッドを埋めます。これらの「空の」メソッドは、抽象メソッドまたは純粋メソッドと呼ばれることもあります。