Есть три класса, наследуются друг от друга.

Код:
//класс A
import com.B;
class com.A extends B
{
public function A(){
}
public function f1( n )
{
_width = n;
}
public function get _width():Number
{
var w = super._width
trace('A get _width '+w);
return w
}
public function set _width(w:Number)
{
super._width = w
}
}
//класс B
import com.C;
class com.B extends C
{
public function B(){
}
/*
public function get _width():Number
{
return super._width
}*/
}
//класс С
class com.C
{
private var _w:Number = 100;
public function C(){
}
public function get _width():Number
{
//trace('C get _width '+(_w+1));
return _w+1
}
public function set _width(w:Number)
{
_w = w
}
}
//код в руте :
a = new com.A();
//a._width = 5;
trace( a._width );
Во первых, почему, если просто запустить то трейс из геттера распечатается один раз, а если раскомментарить строку из рута,то 3 раза ?
И самое интересное, почему, если расскомментарить промежуточный геттер в классе B (что по логике вещей вообще не должно нарушить работу программы, флэш при компиляции выдаст ошибку) :
Type mismatch in assignment statement: found Number where Function is required.
super._width = w
ps. в аттаче лежат эти 3 класса и флашник.