1

OK基本的なOOPとは何かについて質問があります。たとえば、異なるクラスを持つ多くの異なるオブジェクトがあるとします。たとえば、car(Car.as)というオブジェクトが1つあるとすると、トラック(truck.as)と原付(moped.as)があります。これらすべての中で単純な関数を作成する代わりに、クラスを作成してから、この関数をこれらのすべてのオブジェクトにアタッチすることはできませんか?

たとえば、フェードアウトできるようにしたいです。次に、「AlphaThings」というクラスがあり、このクラス内に単純なフェードアウト関数を記述します。

どういうわけか、この関数を別のオブジェクトにアタッチすることはできませんか?好き

AlphaThings.fadeout(car);
AlphaThings.fadeout(truck);
AlphaThings.fadein(moped);

ありがとう、そしてスペルミスのある単語があれば申し訳ありません。

4

2 に答える 2

4

クラスが別のクラスからプロパティとメソッドを継承する継承を実現しようとしています。

継承はextends、クラスを定義するときにキーワードを使用して実行されます。

あなたの3つのオブジェクトCarは、次のようTruckMoped継承(拡張)できますAlphaThings

class Car extends AlphaThings
{
    //
}

これで、などでCar定義されたすべてのプロパティとメソッドが含まれるようになります。AlphaThings.fadein().fadeout()


ボーナス情報

別のクラスを拡張する場合、基本クラス内に存在するメソッドが、それを継承するクラスでどのように機能するかを変更できます。これは、overrideキーワードを使用して行われます。

たとえば、Car使用するときに少し異なるまたは追加の処理を実行したい.fadein()場合は、次のようにそのメソッドをオーバーライドします。

override public function fadein():void
{
    // Some additional logic.
    // ...

    super.fadein();
}

super.fadein()元の関数を呼び出すための行があり.fadein()ます。これを省略すると、関数を完全に書き直して、以前に定義したアクションを無視することができます。


この特定のシナリオについて

もちろん、この答えは的を射たものであり、継承を実現する方法を説明することで質問に直接答えます。そうは言っても、あなたが達成しようとしていることは、他のいくつかのルートの1つを使用してよりクリーンに行うことができます。

たとえば、Greensockによるこのトゥイーンライブラリについて考えてみます。ライブラリは、さまざまな方法で任意のオブジェクトの任意の値(アルファを含む)の遷移を処理できます。これが優れている理由と継承を使用している理由の例を次に示します。

  1. ライブラリは、実際のオブジェクトから完全に分離されています。
  2. ライブラリは、他のすべてのゲームオブジェクトを必要以上に重くすることなく、好きなだけ強力にすることができます。たとえば、使用できるトランジションスタイルには多くの種類があることに気付くでしょう(たとえば、イーズアウト、イーズインなど)-それらすべてがベースオブジェクトの一部であったかどうかを想像してみてください。
  3. ライブラリを使用して何でもターゲットにできます。つまり、ライブラリAlphaThingsを使用するために例から拡張する必要はありません。
  4. 別のライブラリを切り離したり、別のライブラリと交換したりするのは、それが不要になったと判断した場合、またはより良いものを見つけた場合は、比較的簡単です。
  5. AlphaThings新しいプロジェクトからコードの断片を抽出する必要がなく、プロジェクト全体でライブラリを簡単に再利用できます。
于 2012-11-21T00:39:32.727 に答える
1

親クラスで必要な動作を宣言し、そこからCar、Truck、Mopedを派生させます。その後、メソッドを取得します。

次のリンクで詳細を説明しています:http: //help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7fcd.html

于 2012-11-21T00:18:24.960 に答える