1178: Попытка доступа к недоступному свойству, оставленному через ссылку со статическим типом

Я пытаюсь переопределить метод родительского класса. Я успешно это сделал. Но когда я пытаюсь получить доступ к собственности. я получаю следующую ошибку

1178: Attempted access of inaccessible property left through a reference with static type

Это свойство является общедоступным и определено. ниже мой код

package com.objects {

import flash.display.MovieClip;
import flash.events.*;
import flash.display.Stage;
import flash.geom.Rectangle;


public class Brick extends MovieClip {

public var points:Number = 100;
public var bWidth:Number = 50;
public var bHeight:Number = 20;
private var left:Number;
private var right:Number;
private var top:Number;
private var bottom:Number;
public var ball:Ball;
private var lastDistance:Number;
private var engine:Engine;

public var hit:Boolean;


public function Brick():void
{
stop();
addEventListener(Event.ENTER_FRAME, loop);
}

protected function loop(e:Event):void
{
updateArea();
checkBall();
}
protected function updateArea():void {
left = x;
right = x + bWidth;
top = y;
bottom = y + bHeight;
}

protected function killSelf():void {
engine.score += points;
engine.numberOfBricks -= 1;
removeEventListener(Event.ENTER_FRAME,loop);
engine.removeChild(this);
}

protected function checkBall():void
{
if(hitTestObject(ball))
{

if((ball.x + 5) < left)
{
ball.xspeed *= -1;
ball.x -= ball.xspeed + 10;
killSelf();
}
else if((ball.x - 5) > right)
{
ball.xspeed *= -1;
ball.x += ball.xspeed+10;
killSelf();
}

else if(ball.y > bottom && ball.x > left && ball.x < right)
{
ball.yspeed *= -1;
ball.y += ball.yspeed+10;
killSelf();

}
else if(ball.y < top && ball.x > left && ball.x < right)
{
ball.yspeed *= -1;
ball.y -= ball.yspeed+10;
killSelf();                 
}

}
}//End CheckBall

public function getEngine(engine:Engine):void
{
this.engine = engine;
}
public function getBall(ball:Ball):void
{
this.ball = ball;
}
}
} 

Вот главный класс

package com.objects {

    import flash.display.MovieClip;
    import flash.events.*;
    import flash.display.Stage;
    import flash.geom.Rectangle;


    public class Brick2 extends Brick {

        private var armor:Number = 2;

        public function Brick2():void
        {
            gotoAndStop(2);
        }

        override protected function checkBall():void
        {
            if(hitTestObject(this.ball))
            {
                if(armor <=0){

                    if((this.ball.x + 5) < left)
                    {
                        this.ball.xspeed *= -1;
                        this.ball.x -= this.ball.xspeed + 10;
                        killSelf();
                    }
                    else if((this.ball.x - 5) > right)
                    {
                        this.ball.xspeed *= -1;
                        this.ball.x += this.ball.xspeed+10;
                        killSelf();
                    }

                    else if(this.ball.y > bottom && this.ball.x > left && this.ball.x < right)
                    {
                        this.ball.yspeed *= -1;
                        this.ball.y += this.ball.yspeed+10;
                        killSelf();

                    }
                    else if(this.ball.y < top && this.ball.x > left && this.ball.x < right)
                    {
                        this.ball.yspeed *= -1;
                        this.ball.y -= this.ball.yspeed+10;
                        killSelf();                 
                    }
                }//end armor condition
                else
                {
                    --armor
                }
            }
        }//End Checkthis.ball

    }
}

person numerical25    schedule 06.01.2010    source источник


Ответы (3)


В вашем базовом классе var left объявлен как частный. Попытка получить к нему доступ из другого места, включая классы-потомки, не удастся.

person spender    schedule 06.01.2010
comment
большое спасибо. в сообщении об ошибке говорилось, что причиной была другая переменная в этом методе. Я не обращал внимания на другие варианты, которые не были - person numerical25; 07.01.2010

Я нашел для себя простой обходной путь в этом случае. При чтении свойства используйте обычный получатель ActionScript. Но вместо элегантного установщика ActionScript просто укажите java-подобный установщик.

public function get property():Number { return _property; }
myCustomNamespace function setProperty(value:Number):void { _property = value; }
person Stepan    schedule 04.12.2012

Если вы хотите использовать переменную в подклассе, она должна быть защищенной, а не частной.

Закрытый означает, что его может видеть только этот класс, защищенный означает этот класс и его подклассы.

person Ipsquiggle    schedule 06.01.2010