Показать сообщение отдельно
Старый 07.05.2010, 02:07
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 22  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
там другой момент мне не очевиден, какой метод вызовется без этого super
Вызовется переопределенный без вопросов.

Вот у меня зато вопрос возник. Разве нельзя использовать super в классе, который не наследуется ни отчего (или extends Object)?

Вот примерчик, который выдает рантайм ошибку. Может что неправильно делаю?
Код AS3:
var _b:ClassB = new ClassB();
 
 
trace( "_b.methodA(): " + _b.methodA() );
trace( "_b.methodB(): " + _b.methodB() );
trace( "_b.methodC(): " + _b.methodC() );
trace( "_b.methodD(): " + _b.methodD() );
ClassA.as
Код AS3:
package
{
	public class ClassA //extends Object
	{
		public function ClassA()
		{
                      //super();
		}
 
 
		public function methodA():String
		{
			return "ClassA::methodA()";
		}
 
		public function methodB():String
		{
			return methodA();
		}
 
		public function methodC():String
		{
			return this.methodA();
		}
 
		public function methodD():String
		{
			return super.methodA();
		}
	}
}
ClassB.as
Код AS3:
package
{
	public class ClassB extends ClassA
	{
		public function ClassB()
		{
			super();
		}
 
 
		override public function methodA():String
		{
			return "ClassB::methodA()";
		}
	}
}
Цитата:
_b.methodA(): ClassB::methodA()
_b.methodB(): ClassB::methodA()
_b.methodC(): ClassB::methodA()
ReferenceError: Error #1070: Method methodA not found on Object
at ClassA/methodD()
at test_fla::MainTimeline/frame1()
С одной стороны понятно, что в базовом классе нет такой функции, но с другой то - мог бы FP и догадаться что, нужно вызвать ту, которая объявлена в самом начале.


Последний раз редактировалось i.o.; 07.05.2010 в 02:14.