Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Выдается ошибка, если protected доступ к функции, при реализации интерфейса (http://www.flasher.ru/forum/showthread.php?t=197552)

Alexmody 09.04.2013 10:37

Выдается ошибка, если protected доступ к функции, при реализации интерфейса
 
Подскажите, почему при реализации функций интерфейса,
если реализуемой функции присвоить модификатор доступа protected или private,
то выводится ошибка? Если же public - все ок.

Я например, хочу реализовать функцию интерфейса, но при этом, чтобы ее мог заместить (override) наследуемый класс, а для пользователя эта функция была бы недоступна.

Код AS3:

//Интерфейс:
public interface IAction
{
      function init():void; 
      function destroy():void;
}
 
//Реализация
package
{
        public class Base implements IAction
        {
                public function Base() {
                }
 
                //Выдает ошибку, если модификатор доступа к функции protected
                protected function init():void {
                }
 
                public function destroy():void {
                }
        }
}


СлаваRa 09.04.2013 11:00

interface

"Определения методов интерфейса не могут иметь таких атрибутов, как public или private, но реализованные методы должны быть отмечены как public в определении класса, реализующего интерфейс."

Alexmody 09.04.2013 11:08

Да, но как тогда быть если: хочу реализовать функцию интерфейса, но при этом, чтобы ее мог заместить (override) наследуемый класс, а для пользователя эта функция была бы недоступна?

caseyryan 09.04.2013 11:16

Никак. Это же абсурдно по самой сути. Зачем тогда нужен интерфейс?

Alexmody 09.04.2013 11:30

Интерфейс нужен, чтобы определить/реализовать в классе четкий набор функций, для программиста. (чтобы программист не забыл реализовать все функции). Напр. в моем случае, мне нужно скрыть реализуемую ф-ю для конечного пользователя (тот кто будет использовать, а не расширять данный класс).

GBee 09.04.2013 11:53

То есть вы пытаетесь заставить программиста интерфейсом заполнить необходимые методы? Интерфейс не для этого. В вашем случае это какое-то тз.

etc 09.04.2013 12:12

В интерфейсе описываются только публичные свойства и методы. Вам необходим базовый класс с пустым или непустым protected методом. Впрочем, я не очень понимаю, причем тут интерфейс, если ни protected, ни private методы снаружи вызвать нельзя.

Deimos747 09.04.2013 12:37

К сожалению в AS3 нет абстрактных методов, поэтому могу вам только посоветовать использовать следующую конструкцию:
Код AS3:

protecte function overrideMe(): void
{
  throw new Error("Abstract method, override me!");
}


Александр Мостовой 09.04.2013 12:42

Обозначить доступные и недоступные для override протектид методы вы можете при помощи атрибута final.
Т.е. те у которых нет final - доступны для override

Alexmody 09.04.2013 14:28

Хорошо, тогда подскажите первоочередную задачу, для которых созданы интерфейсы?

Интерфейс — это набор объявлений методов, который позволяет несвязанным объектам взаимодействовать
друг с другом.

Т.е. например, если создавать паттерн стратегию, Интерфейс действительно объединяет стратегии (агрегируемые), которые класс Контекст (агрегатор) принимает и использует по правилам заданным в интерфейсе, т.е. Контекст владеет интерфейсом стратегии.
Таким образом всегда предполагал, что Интерфейсы объединяют в систему объекты, для четкого и структурированного их использования программистом. Также Интерфейсы применяются, как маркеры.

Цитата:

Сообщение от GBee (Сообщение 1128922)
То есть вы пытаетесь заставить программиста интерфейсом заполнить необходимые методы? Интерфейс не для этого. В вашем случае это какое-то тз.

Да, к сожалению предполагал примерно так, т.е. интерфейсы объединяют объекты, получая тем самым из несвязанных объектов структурированную систему со своими правилами.

Цитата:

Сообщение от Deimos747 (Сообщение 1128930)
К сожалению в AS3 нет абстрактных методов, поэтому могу вам только посоветовать использовать следующую конструкцию:
Код AS3:

protecte function overrideMe(): void
{
  throw new Error("Abstract method, override me!");
}


Да, для решения выше поставленной задачи так и делаю, видимо мне нужно более точно понять, для чего вообще созданы интерфейсы и какова их задача, к сожалению читал о них в различных книгах по action script 3 и там постоянно приводились примеры описывающие вышеприведенную ( в данном посте) взаимосвязь.


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

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