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

Регистрация: May 2011
Сообщений: 76
Question Namespaced methods overriding.

Вопрос касается объявления кастомных неймспесов, создания методов с ними и их переопределение.
Сразу оговорюсь что пользуюсь intellij idea 12+.
Я могу определить методы в своем неймспесе и их использовать внутри класса, в котором они определены, но не могу переопределить их в дочерних классах, так как на них ругается компилятор(синтаксический анализор идеи молчит).
Для примера я привел небольшую иерархию как она не работает.
Есть такая структура:
Код AS3:
package test
{
    public class namespace_1
    {
        public namespace namespace_1;
    }
}
 
package test
{
    public class namespace_2
    {
        public namespace namespace_2;
    }
}
 
package test
{
    import test.namespace_1;
    import test.namespace_2;
 
    public class Class1
    {
        private var mode:Namespace = namespace_1;// понятное дело что в других методах присвоить можем что хотим.
        ....
        protected function action():void
        {
			....
			mode::foo();
        }
 
		namespace_1 function foo():void
		{
			trace("foo in NS1 operating");
		}
 
		namespace_2 function foo():void
		{
			trace("foo in NS2 operating");
		}
    }
}
 
package test
{
    import test.namespace_1;
    import test.namespace_2;
 
 
	//uses protected function action() from Class1.
    public class Child1 extends Class1
    {    
 
		// COMPILE TIME ERROR:: Namespace was not found or is not a compile-time constant.
		// If i define use namespace namespace_1 before class declaration error changes to 
		// Method marked override must override another method.
		override namespace_1 function foo():void
		{
			trace("foo from Child1 in NS1 operating");
		}		
    }
 
}
 
 
package test
{
    import test.namespace_1;
    import test.namespace_2;
 
 
	//uses protected function action() from Class1.
    public class Grandchild1 extends Child1
    {    
 
		// COMPILE TIME ERROR:: Namespace was not found or is not a compile-time constant.
		// If i define use namespace namespace_1 before class declaration error changes to 
		//Method marked override must override another method.
 
		override namespace_1 function foo():void
		{
			trace("foo  from Grandchild1 in NS1 operating");
		}
    }
 
}

Пожалуйста помогите разобратся с этой темой, кто шарит.

З.Ы.
Я перешарил весь форум в поисках ответа или годного примера, но его не нашел.
Помню был тред в котором обсуждалась возможность перегрузки методов во флеше и кто-то хвастался как он ловко запилил неймспейсы для использования "своей перегрузки" в своей игрушке( фича изменяла режим работы какой-то внутриигровой хреновины: нормальный и турбо)
В общем если кто-то это помнит или встречал буду очень признателен за ссылку.


Последний раз редактировалось searinox; 01.08.2013 в 23:35.