Flash 这是多态性的一个好实现吗?

Flash 这是多态性的一个好实现吗?,flash,actionscript-3,polymorphism,Flash,Actionscript 3,Polymorphism,这是可行的,但这是多态性的一个好例子吗 package mtm.test { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.MovieClip; public class TestDocument extends MovieClip { public function TestDocument() {

这是可行的,但这是多态性的一个好例子吗

package mtm.test 
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.MovieClip;

    public class TestDocument extends MovieClip
    {
        public function TestDocument() 
        {
            var image:Image = new Image();
            image.id = 0;
            image.bitmaps[BitmapFullSize] = new BitmapFullSize(new BitmapData(400, 400, false, 0x000000));
            image.bitmaps[BitmapMediumSize] = new BitmapMediumSize(new BitmapData(250, 250, false, 0x000000));
            image.bitmaps[BitmapThumbnail] = new BitmapThumbnail(new BitmapData(65, 65, false, 0x000000));

            var bmp:BitmapType = image.bitmaps[BitmapFullSize];
            if(bmp != null) addChild(bmp);
        }
    }
}
以下是上面使用的类:

package mtm.test 
{
    import flash.display.Bitmap;
    public dynamic class Image extends Object
    {
        public var id:int;
        public var enabled:int;
        public var orderNum:int;
        public var filename:String;
        public var title:String;
        public var description:String;

        public var medExists:int;
        public var fullExists:int;
        public var thumbExists:int;

        public var bitmaps:Object = new Object();
    }
}
位图类型父类

package mtm.test 
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    public class BitmapType extends Bitmap
    {
        public function BitmapType(bitmapData:BitmapData = null, pixelSnapping:String = 'auto', smoothing:Boolean = false)
        {
            super(bitmapData, pixelSnapping, smoothing);
        }
    }
}
位图类型的子类

package mtm.test 
{
    import flash.display.BitmapData;
    public class BitmapFullSize extends BitmapType 
    { 
        public function BitmapFullSize(bitmapData:BitmapData = null, pixelSnapping:String = 'auto', smoothing:Boolean = false)
        {
            super(bitmapData, pixelSnapping, smoothing);
        }
    }
}

package mtm.test 
{
    import flash.display.BitmapData;
    public class BitmapMediumSize extends BitmapType 
    { 
        public function BitmapMediumSize(bitmapData:BitmapData = null, pixelSnapping:String = 'auto', smoothing:Boolean = false)
        {
            super(bitmapData, pixelSnapping, smoothing);
        }
    }
}

package mtm.test 
{
    import flash.display.BitmapData;
    public class BitmapThumbnail extends BitmapType 
    {
        public function BitmapThumbnail(bitmapData:BitmapData = null, pixelSnapping:String = 'auto', smoothing:Boolean = false)
        {
            super(bitmapData, pixelSnapping, smoothing);
        }
    }
}

如果孩子们只是调用他们的父实现,这并不是真正的多态性。 多态性是指每个子类型都有自己的某个方法实现。 因此,如果您有一个
Resize()
方法,根据每种类型使用不同的算法,那么这就是多态性

这三个子类型的代码都是相同的。


下面是一个经典的例子: 基类称为
Vehicle

子类是
汽车
飞机

每个
汽车
飞机
都有不同的
旅行
方法

然后你可以说:

Vehicle myVehicle = new Boat();
myVehicle.Travel();

这就是多态性。

谢谢@FunkyMuslium。既然它不是多态性,那么在假设未来的实现可能有不同数量的不同大小的位图的情况下,管理多种类型的位图是一种合适的方法吗?