Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   [ооп] class A extends B implements C нет доступа к свойствам B (http://www.flasher.ru/forum/showthread.php?t=115336)

Gaen 27.08.2008 05:12

[ооп] class A extends B implements C нет доступа к свойствам B
 
Делаю класс, который наследуется от Sprite и реализует мой интерфейс.
При этом если пытаться обратиться к свойствам/методам спрайта, компилятор говорит что таких нет, т.е. спрайт вообще отсутствует в цепочке наследования.

В чём может быть проблема?

etc 27.08.2008 10:04

Потому что интерфейс не спрайт. Если нужно обратиться к свойствам спрайта, то либо надо сделать каст в Sprite, либо написать интерфейсы IDisplayObject, IDisplayObjectContainer и т. п. со всеми свойствами.

terbooter 27.08.2008 12:13

хм, как-то не логично...
То есть, интерфейс отрезает все родительские методы класса,
но не отрезает свои методы которых нет в интерфейсе. Не понимаю логики.
По-моему, надо или отрезать все, или не отрезать ничего.

BlooDHounD 27.08.2008 12:33

интерфейс ничего не отрезает.

etc 27.08.2008 13:05

Цитата:

Сообщение от terbooter (Сообщение 760482)
хм, как-то не логично...
То есть, интерфейс отрезает все родительские методы класса,
но не отрезает свои методы которых нет в интерфейсе. Не понимаю логики.
По-моему, надо или отрезать все, или не отрезать ничего.

Интерфейс — это интерфейс. Он описывает методы, которые точно есть данного экземпляра класса. Интерфейс с методом getParam() может быть реализован как наследником Sprite, так и Array. По-вашему, вы сможете воспользоваться методами и Array и Sprite?

terbooter 27.08.2008 13:10

Под "отрезает" я имел ввиду
Цитата:

При этом если пытаться обратиться к свойствам/методам спрайта, компилятор говорит что таких нет, т.е. спрайт вообще отсутствует в цепочке наследования.

etc 27.08.2008 13:19

Цитата:

Сообщение от terbooter (Сообщение 760492)
Под "отрезает" я имел ввиду

Так интерпретатор работает с экземпляром класса, реализующим данный интерфейс. О том, что это Sprite, он понятия не имеет.

terbooter 27.08.2008 13:19

__etc, я так понимаю, когда мы задаем тип объекта
Код:

var s:Sprite;
то компилятор производит что-то вроде автогенерации интерфейса.
(как если бы мы вручную написали интерфейс ISprite добавив туда все публичные методы Sprite)
Вот и получается что
Код:

class A extends Sprite implements B
Это условно как
Код:

class A implements ISprite implements B

etc 27.08.2008 13:22

Нет никакой автогенерации интерфейсов.

terbooter 27.08.2008 13:28

Цитата:

Сообщение от __etc (Сообщение 760488)
Интерфейс — это интерфейс. Он описывает методы, которые точно есть данного экземпляра класса. Интерфейс с методом getParam() может быть реализован как наследником Sprite, так и Array. По-вашему, вы сможете воспользоваться методами и Array и Sprite?

Если класс наследник Sprite, то я бы хотел иметь возможность воспользоваться методами Sprite плюс методы описанные в интерфейсе.

Аналогично для Array.

Не понимаю подвоха. Про множественное наследование никто ничего не говорил.


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

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