Показать сообщение отдельно
Старый 28.09.2010, 06:03
filepark вне форума Посмотреть профиль Отправить личное сообщение для filepark Найти все сообщения от filepark
  № 1  
Ответить с цитированием
filepark

Регистрация: Jul 2009
Сообщений: 77
По умолчанию приведение типов (не получается)

не понимаю почему не удаётся привести тип объекта к нужному. Код ниже, MainClass - основной.
Код AS3:
package {
	import flash.display.*;
 
	public class MainClass extends Sprite {
		private var zzz:Sprite;
 
		public function MainClass() {
			zzz = new TestClass();
			TestClass(zzz);
			zzz.myMethod();
			addChild(zzz);
		}
	}
}
Код AS3:
package {
	import flash.display.*;
 
	public class TestClass extends Sprite {
		private var whiteBack:Shape;
 
		public function TestClass() {
			whiteBack = new Shape();
			whiteBack.graphics.beginFill(0x999999, 1);
			whiteBack.graphics.drawRect(0, 0, 150, 100);
			addChild(whiteBack);
		}
		public function myMethod() {
			whiteBack.x+=10;
		}
	}
}
выходит ошибка: "Call to a possibly undefined method myMethod through a reference with static type flash.display:Sprite."

в моём понимании zzz сначала Sprite, потом TestClass(zzz) - приводит zzz к типу TestClass и нам становятся доступны все методы этого класса. Но методы не доступны, почему?
И почему пишут, что zzz ещё Sprite, разве он уже не TestClass?

если мы заменим строку zzz.myMethod(); на if (zzz is TestClass){zzz.myMethod();}
выходит та же ошибка, получается zzz имеет уже тип TestClass, но методы этого класса вызвать не может. Как же так?


Последний раз редактировалось filepark; 28.09.2010 в 06:20.