2014-09-07 3 views
0

Я новичок в Action Script и очень смущен тем, почему я получаю переполнение стека. Я опубликую все 3 класса (что важно). И выход я получаю. Может кто-нибудь объяснить мне, почему это приведет к переполнению стека?Переполнение стека при создании нового экземпляра класса

Main Class: 

     public function Main() { 
      //Problem starts here 
      player1 = new Player(); 
      player2 = new Player(); 
// More code that does not matter 
     } 

игрока Класс:

package { 

    import fl.motion.Color; 
    import flash.display.MovieClip; 

    public class Player extends MovieClip { 

     public function Player() { 
      var index:Finger = new Finger(); 
      var middle:Finger = new Finger(); 
      var ring:Finger = new Finger(); 
      var pinkie:Finger = new Finger(); 
     } 
    } 
} 

Палец Класс:

package { 

    public class Finger extends Player { 

     var colorOn:String; 

     public function Finger(){ 
      colorOn = "" 
     } 

     function SetColor(colour:String):void { 
      this.colorOn = colour; 
     } 
    } 
} 

Выход:

Is this where stack overflow accuros? 
Error: Error #1023: Stack overflow occurred. 
    at flash.display::DisplayObject() 
    at flash.display::InteractiveObject() 
    at flash.display::DisplayObjectContainer() 
    at flash.display::Sprite() 
    at flash.display::MovieClip() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
    at Finger() 
    at Player() 
+0

На вашем конструкторе класса пальцев, разве вы не пропустили полуколонку? Не должно быть так: this.colorOn = ""; –

+0

Это показало бы ошибку времени компиляции. Я исправил его, но у меня такая же ошибка. – Cornelis

ответ

3

Для того, чтобы создать Player, создать четыре новые Finger объективистские ts ... но каждый Finger объект также является Player (потому что Finger распространяется Player). Поэтому для создания каждого из этих четырех объектов необходимо создать четыре .Fingers и т. Д. ... поэтому переполнение стека.

Это Почему Это происходит - к сожалению, у нас недостаточно контекста того, что вы пытаетесь достичь, чтобы предложить правильное исправление, обязательно. Самый простой подход может состоять в том, чтобы остановить Finger от расширения Player - вы уверены, что это должно быть так?

+0

Это именно то, что я искал спасибо – Cornelis