8

「アップキャスト」という用語が OOP に関連していることはわかりますが、インターネットを検索しても正確な定義を見つけることができません。

この用語の意味と、この手法が役立つ状況を説明できる人はいますか?

4

1 に答える 1

10

投稿したタグの説明から:

アップキャストにより、サブクラス型のオブジェクトを任意のスーパークラス型のオブジェクトとして扱うことができます。

基本的に、擬似コードで例を示すために、サブクラスのインスタンスをそのスーパークラスの 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 などを持ち、空のメソッドを埋めます。これらの「空の」メソッドは、抽象メソッドまたは純粋メソッドと呼ばれることもあります。

于 2012-09-18T07:21:43.337 に答える