Показать сообщение отдельно
Старый 11.05.2010, 03:28
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 27  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
я очень прошу. можно еще раз, другими словами, популярно пояснить — чего мы хотим? Пост #7 с демонстрацией того, как все запущено, мне в упор не понятен.

ну надо тебе иметь базовый класс, ну опиши его:
Код AS3:
public class ClassA
{
	public function ClassA():void
	{
	}
 
	public function methodA():String
	{
		return "ClassA::methodA()";
	}
}
надо тебе его расширить, ну расширяй:
Код AS3:
public class ClassB extends ClassA
{
	public function ClassB()
	{
		super();
	}
 
	override public function methodA():String
	{
		return "ClassB::methodA()";
	}
}
и ты утверждаешь, что теперь будет так:
Код AS3:
var _a:ClassA = new ClassA();
var _b:ClassB = new ClassB();
 
trace(_a.methodA());		// думаешь, что выведет "ClassB::methodA()",
				// потому что мы его переопределили в наследнике
или о чем вообще три страницы?

о том что:
Код AS3:
var _b:ClassB = new ClassB();
 
trace(_b.methodA());		// таки выведет "ClassB::methodA()",
				// потому что мы его переопределили в наследнике
а ты хотел, чтобы вывело "ClassA::methodA()"? тогда зачем ты вообще его переопределял?

или ты хочешь одной иметь в экземпляре класса B возможность вызвать и переопределенный и непереопределенный методы? тогда зачем ты вообще грузишь этими проблемами суперкласс A? Допиши в ClassB новый метод, скажем, methodAsuper(), в котором вызываешь просто super.methodA(). и будет твое заветное:
Код AS3:
var _b:ClassB = new ClassB();
 
trace(_b.methodAsuper());	// таки выведет "ClassA::methodA()",
но не в ClassA же это делать. не его головная боль, что ты там навыдумывал в наследнике.
__________________
Поймай яблоко 2!