Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   интерфейсы и наследование (http://www.flasher.ru/forum/showthread.php?t=113277)

$mival 23.06.2008 21:40

интерфейсы и наследование
 
приветствую.
решил тут попробовать интерфейсы :)
проблема в следующем:
есть 2 класса, наследующих Sprite и реализующих некоторый интерфейс, назовем его IBlock.
следующий код выдает ошибку, мол нет такого метода "hitTestObject":
Код:

var block:IBlock = classInstance; // присваиваем переменной block экземпляр одного из этих 2х классов
trace (block.hitTestObject(someObj)) // пытаемся использовать Sprite'вый метод

я так понимаю в этом случае IBlock должен расширять какой-то другой интерфейс. если так то какой?

Greenish 23.06.2008 21:52

нет. надо чтобы классы наследовались от одного класса Block например и имплементились от IBlock.
тогда код будет такой:
var block:IBlock = classInstance as Block;

а вообще я считаю что интерфейс тут и не нужен.. просто наследуемся от одного класса и все. я не прав?

etc 23.06.2008 23:29

Цитата:

Сообщение от Greenish (Сообщение 747418)
а вообще я считаю что интерфейс тут и не нужен.. просто наследуемся от одного класса и все. я не прав?

Зависит от задачи.

А вообще, проблема в том, что интерфейс не является DisplayObjectContainer (или у кого там объявлен hitTestObject), поэтому для использования этого метода, нужно приводить к соответствующему типу.

Greenish 23.06.2008 23:48

возможно вот так будет работать?
var block:IBlock = classInstance as Sprite;
тк они от спрайта наскока я знаю..

BlooDHounD 24.06.2008 00:50

Greenish, она ваши примеры неверны. надо что бы у IBlock был данный метод, как написал выше __etc, а не что бы кто-то где-то там кого-то имел.

$mival 24.06.2008 08:19

Код:

var block:IBlock = classInstance as DisplayObjectContainer ;
trace (block.hitTestObject(someObj))

Цитата:

1067: Implicit coercion of a value of type flash.display:DisplayObjectContainer to an unrelated type engine.display:IBlock.
1061: Call to a possibly undefined method hitTestObject through a reference with static type engine.display:IBlock.
ругается на первую и вторую строки соответственно.

etc 24.06.2008 10:49

Цитата:

Сообщение от $mival (Сообщение 747462)
Код:

var block:IBlock = classInstance as DisplayObjectContainer ;
trace (block.hitTestObject(someObj))


ругается на первую и вторую строки соответственно.

Потому что вам вообще здесь интерфейс не нужен. Он нужен тогда, когда вы хотите вызвать метод, который описывает этот интерфейс.


Часовой пояс GMT +4, время: 22:11.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.