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

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

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

Регистрация: Sep 2012
Сообщений: 204
По умолчанию наследование и переопределение методов

Добрый вечер
Помогите пожалуйста. Делаю первые шаги в создании своих классов, и сейчас столкнулся с наследованием
Мне надо переопределить некоторые функции родительского класса. Я прочитал много материала про это не , некоторые моменты не пойму
Код AS3:
public class MenuItem extends Sprite {
 
        public function MenuItem(title:String) {
 
public class SubItem extends MenuItem {
 
	public function SubItem(title:String) {
по сути конструктор мне менять не надо,
1)как мне прописать, чтобы дочерний класс применял в свой конструктор, конструктор родителя?
2)И на будущее, если мне надо будет переопределить конструктор родительского, как правильно это сделать?

также при компиляции флеш ругается на переменную в переопределяющем методе.
Код AS3:
public function addTitle():void {
			_titleText = new Sprite();
//в дочернем класссе
override public function addTitle():void {
			_titleText = new Sprite();
//Attempted access of inaccessible property container through a reference with static type SubItem.
_titleText обозначена приватной переменной (до конструктора класса). Что тут не так?

Старый 20.01.2013, 20:43
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 2  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Конструктор надкласса сам вызовется, можно сделать это явно как super() или неявно, опустив эту инструкцию. Компилятор сам сделает в байткоде вызов super(); Переопределить конструктор как он есть невозможно.

А где вы "container" определяли?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 20.01.2013, 20:49
pomuс вне форума Посмотреть профиль Отправить личное сообщение для pomuс Найти все сообщения от pomuс
  № 3  
Ответить с цитированием
pomuс

Регистрация: Sep 2012
Сообщений: 204
Код AS3:
это в классе родителе до конструктора
private var container:Sprite = new Sprite();
private var _titleText:Sprite;
private var _title:String;
также ругань была на
Attempted access of inaccessible property _titleText through a reference with static type SubItem.
Attempted access of inaccessible property _title through a reference with static type SubItem.

такое ощущение что переменные не наследовались. Но из прочитанных материалов, говорилось что они передаюттся

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Приватные переменные не будут доступны в подклассах. Если хотите что бы переменная была доступна в наследниках, используйте protected вместо private.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 20.01.2013, 21:03
pomuс вне форума Посмотреть профиль Отправить личное сообщение для pomuс Найти все сообщения от pomuс
  № 5  
Ответить с цитированием
pomuс

Регистрация: Sep 2012
Сообщений: 204
так, переделал. А public наверное и так наследуются да?
еще 1 ошибка, при компиляции
Код AS3:
метод дочернего класса
override public function addItem(item:SubItem):void {
			item.y = 28 * container.numChildren;
а в stage в самой флешке добавляется
Код AS3:
var item4_1:SubItem = new SubItem("1");
	var item4:MenuItem = new MenuItem("1st")
	stage.addItem(item4);
	item4.addItem(item4_1);
//Incorrect number of arguments.  Expected 0.  // на первую строчку
ругается все таки на другое. В родительском классе есть конструктор
Код AS3:
public function MenuItem(title:String) {
			buttonMode = true;
вот как раз идет связь с первым вопросом. В дочернем классе я не ставил конструктор именно класса SubItem. получается там срабатывает конструктор от родителя. Но тем не менее выстреливает эта ошибка


Последний раз редактировалось pomuс; 20.01.2013 в 21:15.
Старый 20.01.2013, 21:18
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 6  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
http://help.adobe.com/ru_RU/as3/lear...73f7-7fea.html
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 21.01.2013, 00:23
pomuс вне форума Посмотреть профиль Отправить личное сообщение для pomuс Найти все сообщения от pomuс
  № 7  
Ответить с цитированием
pomuс

Регистрация: Sep 2012
Сообщений: 204
спасибо за помощь!
Если кто то столкнется такой же загвоздкой, то вкратце скажу:
у классса ребенка также должен обозначатся конструктор. Если нужно просто скопировать конструктор в родителя, то конструктор ребенка можно оставить пустым.
для переноса нужного параметра в конструктор родителя, надо в конструкторе ребенка указать super(parametr);
а сама форма конструктора должна быть идентична родителськой

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
1. Не обязательно.
1.1 Конструктор ребенка можно вообще не описывать.
3. Не обязательно.
__________________
משיח לא בא
משיח גם לא מטלפן

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:57.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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