0

私はActionScript3を使用しており、Bitmapを拡張するクラスを作成しています。また、Bitmapのすべての動作を実行し、bitmapDataをより柔軟性のあるbi​​tmapDataのサブクラスに置き換えたいと考えています。

だから基本的に私が持っているのは(比喩)です:

Class Gunman
{
    //Has-A
    public var pistol : Gun;
    public function Gunman(gun : Gun)
    {
        this.pistol = gun;
    }
    //methods
    public function shoot():void ..
    {
        pistol.fire();
    }  
}

Class Gun
{
    //constructor omitted cause it is unnecessary for this example
    public function fire():void ..
}

次に、これら2つのクラスを拡張します。

Class Automatic extends Pistol
{
    override public function fire():void
    {
        super.fire(); super.fire(); super.fire();
    }
}

Class NavySeal extends Gunman
{
    public function Enforcer(auto : Automatic)
    {
        super(auto);
    }
}

問題は、人々がまだこれを簡単に行うことができるということです:

var eliteSoldier : NaveSeal = new Enforce(new Automatic());
eliteSoldier.pistol = new Gun();

そして、これは悪いでしょう。これを防ぐ方法はありますか?

「Gunman」はAPIの一部であるため、変更できません。

4

1 に答える 1

1

パブリックプロパティを変更できないようにしようとしている場合は、パブリックプロパティpublic var pistol:Gun;を定義しているクラスを制御できない場合よりも変更できません。これは悪い設計です。代わりにゲッター/セッターにする必要があります。次に、ユーザーが通過しているものなどを取得してテストできるようになります。

よろしくお願いします

于 2012-09-27T11:28:05.747 に答える