2010-07-17 2 views
0

Это работает, но является ли это хорошим примером полиморфизма?Является ли это хорошей реализацией полиморфизма?

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(); 
    } 
} 

BitmapType родительского класса

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); 
     } 
    } 
} 

подклассов BitmapType

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); 
     } 
    } 
} 

ответ

2

Это не Полиморфизм, если дети просто называют свою родительскую реализацию. Полиморфизм - это если каждый подтип имеет собственную реализацию некоторого метода. Итак, если у вас есть метод Resize(), в котором используется другой алгоритм, основанный на каждом типе, то это будет полиморфизм.

Ваш код для каждого из трех подтипов идентичен.


Вот классический пример: Базовый класс называется Vehicle
подклассы Car, Boat, Airplane.

Каждый из Car, Boat, Airplane будет иметь Travel метод.

Тогда вы могли бы сказать:

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

Это полиморфизм.

+0

Спасибо @funkymushroom. Поскольку это не полиморфизм, это достойный способ управлять несколькими типами растрового изображения, исходя из предположения, что в будущих реализациях может быть разное количество растровых изображений с разными размерами? –

Смежные вопросы