У меня есть два класса, derivedClassA
и derivedClassB
, которые оба расширяют parentClass
. Я объявляю var o:parentClass
, а затем, в зависимости от того, что происходит, я хочу привести o
к типу derivedClassA
или derivedClassB
.
По сути, это:
var o:parentClass
...
if(shouldUseA)
o = new derivedClassA();
else
o = new derivedClassB();
o.doSomething();
Но это не работает, я получаю все виды ошибок. Разве не так работает наследование классов? Я чувствую, что мне не хватает чего-то действительно фундаментального, но я не могу понять, что. Должен ли я вместо этого использовать интерфейсы? Есть ли другой способ сделать то, что я хочу?
РЕДАКТИРОВАТЬ ДЛЯ ПОЯСНЕНИЯ:
- doSomething()
определено в parentClass
как общедоступное, а в производных классах как override public function doSomething()
- ошибки, которые я получаю, это "Вызов возможно неопределенного метода doSomething через ссылку со статическим типом parentClass". и «Неявное приведение значения типа derviedClassA к несвязанному типу parentClass»
var o:classA
и пытаетесь привести его кclassB
, что не сработает. Однако вы должны быть в состоянии сделать то, что говорит пример, то есть объявитьvar o:parentClass
, а затем присвоить ему значение одного из его дочерних классов. Что вы пытаетесь сделать и какие ошибки вы получаете? Кроме того, как было сказано выше: определен ли doSomething в родительском классе? Если нет, вам нужно будет выполнить кастинг заранее (например: classA(o).doSomething();) - person Austin Fitzpatrick   schedule 17.06.2010doSomething()
определяется вparentClass
как общедоступный, а в производных классах какoverride public function doSomething()
Ошибки, которые я получаю, - это вызов возможно неопределенного метода doSomething через ссылку со статическим типом parentClass. и Неявное приведение значения типа derviedClassA к несвязанному типу parentClass. - person user368652   schedule 17.06.2010DerviedClassA extends ParentClass
и не забыли объявитьdoSomething
вParentClass
? - person Amarghosh   schedule 17.06.2010