Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.04.2013, 10:37
Alexmody вне форума Посмотреть профиль Отправить личное сообщение для Alexmody Найти все сообщения от Alexmody
  № 1  
Ответить с цитированием
Alexmody

Регистрация: Dec 2010
Сообщений: 177
Question Выдается ошибка, если 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 {
		}
	}
}

Старый 09.04.2013, 11:00
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 2  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
interface

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

Старый 09.04.2013, 11:08
Alexmody вне форума Посмотреть профиль Отправить личное сообщение для Alexmody Найти все сообщения от Alexmody
  № 3  
Ответить с цитированием
Alexmody

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

Старый 09.04.2013, 11:16
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Никак. Это же абсурдно по самой сути. Зачем тогда нужен интерфейс?

Старый 09.04.2013, 11:30
Alexmody вне форума Посмотреть профиль Отправить личное сообщение для Alexmody Найти все сообщения от Alexmody
  № 5  
Ответить с цитированием
Alexmody

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

Старый 09.04.2013, 11:53
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 6  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
То есть вы пытаетесь заставить программиста интерфейсом заполнить необходимые методы? Интерфейс не для этого. В вашем случае это какое-то тз.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 09.04.2013, 12:12
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
В интерфейсе описываются только публичные свойства и методы. Вам необходим базовый класс с пустым или непустым protected методом. Впрочем, я не очень понимаю, причем тут интерфейс, если ни protected, ни private методы снаружи вызвать нельзя.

Старый 09.04.2013, 12:37
Deimos747 вне форума Посмотреть профиль Отправить личное сообщение для Deimos747 Найти все сообщения от Deimos747
  № 8  
Ответить с цитированием
Deimos747
 
Аватар для Deimos747

Регистрация: Mar 2011
Сообщений: 243
К сожалению в AS3 нет абстрактных методов, поэтому могу вам только посоветовать использовать следующую конструкцию:
Код AS3:
protecte function overrideMe(): void
{
   throw new Error("Abstract method, override me!");
}

Старый 09.04.2013, 12:42
Александр Мостовой вне форума Посмотреть профиль Отправить личное сообщение для Александр Мостовой Посетить домашнюю страницу Александр Мостовой Найти все сообщения от Александр Мостовой
  № 9  
Ответить с цитированием
Александр Мостовой
 
Аватар для Александр Мостовой

Регистрация: Sep 2001
Адрес: Харьков
Сообщений: 305
Отправить сообщение для Александр Мостовой с помощью ICQ Отправить сообщение для Александр Мостовой с помощью Skype™
Обозначить доступные и недоступные для override протектид методы вы можете при помощи атрибута final.
Т.е. те у которых нет final - доступны для override
__________________
...

Старый 09.04.2013, 14:28
Alexmody вне форума Посмотреть профиль Отправить личное сообщение для Alexmody Найти все сообщения от Alexmody
  № 10  
Ответить с цитированием
Alexmody

Регистрация: Dec 2010
Сообщений: 177
Хорошо, тогда подскажите первоочередную задачу, для которых созданы интерфейсы?

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

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

Цитата:
Сообщение от GBee Посмотреть сообщение
То есть вы пытаетесь заставить программиста интерфейсом заполнить необходимые методы? Интерфейс не для этого. В вашем случае это какое-то тз.
Да, к сожалению предполагал примерно так, т.е. интерфейсы объединяют объекты, получая тем самым из несвязанных объектов структурированную систему со своими правилами.

Цитата:
Сообщение от Deimos747 Посмотреть сообщение
К сожалению в AS3 нет абстрактных методов, поэтому могу вам только посоветовать использовать следующую конструкцию:
Код AS3:
protecte function overrideMe(): void
{
   throw new Error("Abstract method, override me!");
}
Да, для решения выше поставленной задачи так и делаю, видимо мне нужно более точно понять, для чего вообще созданы интерфейсы и какова их задача, к сожалению читал о них в различных книгах по action script 3 и там постоянно приводились примеры описывающие вышеприведенную ( в данном посте) взаимосвязь.


Последний раз редактировалось Alexmody; 09.04.2013 в 14:43.
Создать новую тему Ответ Часовой пояс GMT +4, время: 17:50.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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